Java Zero Foundation_Zero Basic Java Essential Study Notes (10) Java Object-Oriented | August Update Challenge

object oriented

1. What is the difference between process-oriented and object-oriented?

From a language perspective:

  • For the C language, it is completely process-oriented.

  • For the C++ language, it is half procedure-oriented and half object-oriented. (C++ is semi-object-oriented)

  • For the Java language, it is completely object-oriented.

What is process-oriented development?

The main characteristics of process-oriented development are:

Pay attention to the steps, and focus on the steps to achieve this function.

what to do first

what is the second step

....

In addition, process-oriented also pays attention to the causal relationship of the realization function.

Because A has all B

C because of B

D because of C

.....

There is no concept of objects in process orientation. Just the steps to implement this function and the cause and effect.

What are the disadvantages of process orientation? (High coupling, poor expansion force.)

The main process-oriented is the causal relationship between each step and each step, where step A is causally related to step B, A and B are combined to form a sub-module, and sub-modules and sub-modules are combined because of causal relationship, assuming any of them. When a causal relationship goes wrong (error), the entire system will fail. (The coupling between code and code is too high, and the scalability is too poor.)

Bolts and nuts screwed together: is the coupling high?

This is low coupling because the bolt and nut can be unscrewed. (There is an interface between them.)

After the bolts and nuts are screwed together, they are welded together with a welding rod. Is the coupling degree high?

The coupling is very high. Coupling is the degree of adhesion.

Often the expansion force with high coupling degree is poor.

High coupling leads to poor expansion force. (Integrated graphics card: The computer graphics card is not independent, it is integrated into the motherboard)

Low coupling leads to strong expansion. (The relationship between the bulb and the lamp socket, the relationship between the bolt and the nut)

What would it be like to develop a computer in a process-oriented way?

This computer will have none of the parts, everything will be fused together.

Your computer is a solid piece with no parts. One machine.

Suppose there is a problem with any "part" of this all-in-one computer, the whole computer will not be able to be used,

Must be thrown away. (There is no concept of objects.)

What would it be like to develop a computer in an object-oriented way?

  • A memory stick is an object

  • The board is an object

  • CPU is an object

  • hard disk is an object

These objects are then assembled together to form a computer.

Assuming that the CPU is broken, we can remove the CPU and replace it with a new one.  

What are the advantages of process orientation? (rapid development)

对于小型项目(功能),采用面向过程的方式进行开发,效率较高。

不需要前期进行对象的提取,模型的建立,采用面向过程

方式可以直接开始干活。一上来直接写代码,编写因果关系。

从而实现功能。

什么是面向对象的开发方式?

采用面向对象的方式进行开发,更符合人类的思维方式。(面向对象成为主流的原因)

人类就是以“对象”的方式去认识世界的。

所以面向对象更容易让我们接受。

面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然后给一个环境驱动一下,让各个对象之间协作起来形成一个系统。

  • 对象“张三”

  • 对象“香烟”

  • 对象“打火机”

  • 对象“吸烟的场所”

然后将以上的4个对象组合在一起,就可以模拟一个人的抽烟场景。

其中“张三”对象可以更换为“李四”

其中“香烟”也可以更换品牌。 其中“打火机”也可以更换。

其中“吸烟的场所”也可以更换。

采用面向对象的方式进行开发:

耦合度低,扩展力强。

找一个合适的案例。说明一下面向对象和面向过程的区别?

蛋炒饭:

鸡蛋和米饭完全混合在一起。没有独立对象的概念。

假设客户提出新需求:我只想吃蛋炒饭中的米饭,怎么办?

客户提出需求,软件开发者必须满足这个需求,于是开始扩展,这个软件的扩展是一场噩梦。(很难扩展,耦合度太高了。)  

盖饭:

老板,来一份:鱼香肉丝盖饭

鱼香肉丝是一道菜,可以看成一个独立的对象。

米饭可以看成一个独立的对象。

两个对象准备好之后,只要有一个动作,叫做:“盖”

这样两个对象就组合在一起了。

假设客户提出新需求:我不想吃鱼香肉丝盖饭,想吃西红柿鸡蛋盖饭。

这个扩展就很轻松了。直接把“鱼香肉丝”对象换成“西红柿鸡蛋”对象。

目前先听一下,需要三四年的时候才能彻底领悟面向对象。

  • 面向过程主要关注的是:实现步骤以及整个过程。

  • 面向对象主要关注的是:对象A,对象B,对象C,然后对象ABC组合,或者CBA组合.....

 

2、当我们采用面向对象的方式贯穿整个系统的话,涉及到三个术语:

OOA:面向对象分析

OOD:面向对象设计

OOP:面向对象编程

整个软件开发的过程,都是采用OO进行贯穿的。

 

实现一个软件的过程:

分析(A) --> 设计(D) --> 编程(P)

在软件公司当中,一般同事与同事之间聊天,有的时候会突然说出来一个英语单词。

这种情况是很常见的。所以一些术语还是要知道的,不然会闹出笑话。

  • leader 领导/经理/组长

  • team 团队

  • PM 项目经理(整个项目的监管人)Project Manager

3、面向对象包括三大特征

  • 封装

  • 继承

  • 多态

 

任何一个面向对象的编程语言都包括这三个特征

例如:

  • python也有封装 继承 多态。

  • java也有封装 继承 多态。

注意:java只是面向对象编程语言中的一种。

除了java之外,还有其它很多很多的编程语言也是面向对象的。

以上三个特征的名字先背会,后面一个一个进行学习。

4、类和对象的概念

面向对象当中最主要“一词”是:对象。

  • 什么是类?

类实际上在现实世界当中是不存在的,是一个抽象的概念。

是一个模板。是我们人类大脑进行“思考、总结、抽象”的一个结果。(主要是因为人类的大脑不一般才有了类的概念。)

类本质上是现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”,“类”就是一个模板。

明星是一个类

  • 什么是对象?

对象是实际存在的个体。(真实存在的个体)

宋小宝就是一个对象

姚明就是一个对象

刘德华就是一个对象

....

宋小宝、姚明、刘德华这3个对象都属于“明星”这个类。

在java语言中,要想得到“对象”,必须先定义“类”,“对象”是通过“类”

这个模板创造出来的。

类就是一个模板:类中描述的是所有对象的“共同特征信息”

对象就是通过类创建出的个体。

这几个术语你需要自己能够阐述出来:

  • 类:不存在的,人类大脑思考总结一个模板(这个模板当中描述了共同特征。)

  • 对象:实际存在的个体。

  • 实例:对象还有另一个名字叫做实例。

  • 实例化:通过类这个模板创建对象的过程,叫做:实例化。

  • 抽象:多个对象具有共同特征,进行思考总结抽取共同特征的过程。

 

类 --【实例化】--> 对象(实例)

对象 --【抽象】--> 类

类是一个模板,是描述共同特征的一个模板,那么共同特征包括什么呢?

潘长江对象:

名字:潘长江

身高:165cm

打篮球:非专业的,自己玩儿呢,无所谓了

学习:考试80分

姚明对象:

名字:姚明

身高:240cm

打篮球:NBA专业球员,打篮球非常棒

学习:考试100分

 

共同特征包括哪些?

名字、身高都属于名词(状态特征)

打篮球、学习都属于动词(动作特征)

类 = 属性 + 方法

属性来源于:状态

方法来源于:动作

public class 明星类{

//属性-->状态,多见于名词

名字属性;

身高属性;  

//方法-->动作,多见于动词

打篮球方法(){

}

学习方法(){

}

}
复制代码

陈赓同学、何伟彬同学,他们俩有没有共同特征呢?

有共同特征,就可以抽象一个类模板出来。

可以定义一个学生类(Student)

public class Student {

// 属性

// 姓名

// 性别

// 身高

// 方法

public .... sing(){

}

public .... dance(){

}

public .... study(){

}

.... }  

5、思考:“java软件工程师”在开发中起到的一个作用是什么?

我们为什么要做软件开发?

说的大一些是为了人民服务。解决现实生活当中的问题。

软件开发既然是为了解决现实世界当中的问题,那么首先java软件必须能够模拟现实世界。

其实软件是一个虚拟的世界。

这个虚拟的世界需要和现实世界一一对应,这才叫模拟。

6、类的定义

6.1、怎么定义一个类,语法格式是什么?

[修饰符列表] class 类名 {

//类体 = 属性 + 方法

// 属性在代码上以“变量”的形式存在(描述状态)

// 方法描述动作/行为

}
复制代码

注意:修饰符列表可以省略。

6.2、为什么属性是“以”变量的形式存在的?

假设我们要描述一个学生:

学生包括哪些属性:

学号: 110

姓名:"张三"

性别:'男' (true/false)

住址:"深圳宝安区"

答案:是因为属性对应的是“数据”,数据在程序中只能放到变量中。

结论:属性其实就是变量。  

变量的分类还记得吗?

变量根据出现位置进行划分:

方法体当中声明的变量:局部变量。

方法体外声明的变量:成员变量。(这里的成员变量就是“属性”)

6.3、请大家观察“学生对象1”和“学生对象2”的共同特征,然后再利用java语言将该“学生类”表述/表达出来。(这里只表达属性,不表达方法.)

7、关于编译的过程

按说应该先编译XueSheng.java,然后再编译XueShengTest.java

但是对于编译器来说,编译XueShengTest.java文件的时候,会自动找XueSheng.class,如果没有,会自动编译XueSheng.java文件,生成XueSheng.class文件。

  • 第一种方式:

javac XueSheng.java

javac XueShengTest.java

  • 第二种方式:

javac XueShengTest.java

  • 第三种方式:

Javac *.java  

8、在语法级别上是怎么完成对象创建的呢?

类名 变量名 = new 类名();

这样就完成了对象的创建。

9、什么是实例变量?

对象又被称为实例。

实例变量实际上就是:对象级别的变量。

public class 明星类{

double height;

}
复制代码

身高这个属性所有的明星对象都有,但是每一个对象都有“自己的身高值”。

假设创建10个明星对象,height变量应该有10份。

所以这种变量被称为对象级别的变量。属于实例变量。

实例变量在访问的时候,是不是必须先创建对象?

10、对象和引用的区别?

对象是通过new出来的,在堆内存中存储。

引用是:但凡是变量,并且该变量中保存了内存地址指向了堆内存当中的对象的。

Guess you like

Origin juejin.im/post/6991745447102513182