目录
面向对象理论
面向过程(OP)
面向对象(OO)
面向对象三个术语和三大特征
类和对象
类的定义
编译的过程
知识框架
❤️面向过程和面向对象有什么区别?
⭐️从语言方面出发:
(1)对于C语言来说,是完全面向过程的。
(2)对于C++语言来说,是一半面向过程,一半是面向对象。(C++是半面向对象的)
(3)对于Java语言来说,是完全面向对象的。
❤️什么是面向过程的开发方式?
⭐️面向过程的开发方式主要的特点是:
(1) 注重步骤,注重的是实现这个功能的步骤。
第一步干什么
第二步干什么
....
(2) 面向过程也注重实现功能的因果关系。
因为A所以B
因为B所以C
因为C所以D
.....
⭐️面向过程中没有对象的概念。只是实现这个功能的步骤以及因果关系。
❤️面向过程有什么缺点(耦合度高,扩展力差。)
⭐️面向过程最主要是每一步与每一步的因果关系,其中A步骤因果关系到B步骤,A和B联合起来形成一个子模块,子模块和子模块之间又因为因果关系结合在一起,假设其中任何一个因果关系出现问题(错误),此时整个系统的运转都会出现问题。⭐️代码和代码之间的耦合度太高,扩展力太差!
⭐️螺丝螺母拧在一起:耦合度高吗?
这是耦合度低的,因为螺栓螺母可以再拧开。(它们之间是有接口的。)
⭐️螺栓螺母拧在一起之后,再用焊条焊接在一起,耦合度高吗?
这个耦合度就很高了。耦合度就是黏连程度。往往耦合度高的扩展力就差。
❤️面向过程有什么优点?(快速开发)
⭐️对于小型项目(功能),采用面向过程的方式进行开发,效率较高。
⭐️不需要前期进行对象的提取,模型的建立,采用面向过程方式可以直接开始干活。一上来直接写代码,编写因果关系;从而实现功能。
❤️采用面向过程的方式开发一台计算机会是怎样?
⭐️这台计算机将没有任何一个部件,所有的都是融合在一起的。
⭐️这台计算机是一个实心儿的,没有部件的;一体机。(没有对象的概念。)
⭐️假设这台一体机的任何一个“部位”出问题,整个计算机就不能用了,必须扔掉了。
❤️采用面向对象的方式开发一台计算机会是怎样?
⭐️里面的部件都是一个对象;例如: 内存条是一个对象、主板是一个对象、CPU是一个对象、硬盘是一个对象等,然后这些对象组装在一起,形成一台计算机。
⭐️假设有一个部件CPU坏了,我们可以将CPU拆下来,换一个新的;就可以继续使用
❤️什么是面向对象的开发方式?
⭐️采用面向对象的方式进行开发,更符合人类的思维方式。(面向对象成为主流的原因)
⭐️人类就是以“对象”的方式去认识世界的。 所以面向对象更容易让我们接受。
❤️面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然后给一个环境驱动一下,让各个对象之间协作起来形成一个系统。
⭐️例如:对象“张三”、对象“香烟”、对象“打火机”、对象“吸烟的场所”;然后将以上的4个对象组合在一起,就可以模拟一个人的抽烟场景。
⭐️其中“张三”对象可以更换为“李四”、其中“香烟”也可以更换品牌、其中“打火机”也可以更换、其中“吸烟的场所”也可以更换。
❤️采用面向对象的方式进行开发:耦合度低,扩展力强。
❤️一个经典案例区分一下面向对象和面向过程?
⭐️蛋炒饭:是面向过程的
(1)鸡蛋和米饭完全混合在一起。没有独立对象的概念。
(2)假设客户提出新需求:我只想吃蛋炒饭中的米饭,怎么办?
(3)客户提出需求,软件开发者必须满足这个需求;这个软件的扩展很难因为耦合度太高了!⭐️盖饭:是面向对象的
(1)鱼香肉丝是一道菜,可以看成一个独立的对象;米饭可以看成一个独立的对象。
(2)两个对象准备好之后,只要有一个动作,叫做:“盖”,这样两个对象就组合在一起了。
(3) 假设客户提出新需求:我不想吃鱼香肉丝盖饭,想吃西红柿鸡蛋盖饭;这个扩展就很轻松了。直接把“鱼香肉丝”对象换成“西红柿鸡蛋”对象。
❤️总结:
⭐️面向过程主要关注的是:实现步骤以及整个过程。
⭐️面向对象主要关注的是:对象A,对象B,对象C,然后对象ABC组合,或者CBA组合.....
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
⭐️整个软件开发的过程,都是采用OO进行贯穿的。实现一个软件的过程:分析(A) --> 设计(D) --> 编程(P);⭐️leader 领导/经理/组长、team 团队、PM 项目经理(整个项目的监管人)Project Manager
三大特征:封装、继承、多态
⭐️任何一个面向对象的编程语言都包括这三个特征;例如:python也有封装 继承 多态。java也有封装 继承 多态。
⭐️注意:java只是面向对象编程语言中的一种。
❤️面向对象当中最主要“一词”是:对象。
⭐️什么是类?
(1)类实际上在现实世界当中是不存在的,是一个抽象的概念,是一个模板。是我们人类大脑进行“思考、总结、抽象”的一个结果。
(2)类本质上是现实世界当中某些事物具有共同特征,将这些共同特征提取出来形成的概念就是一个“类”,“类”就是一个模板。明星就是一个类
⭐️什么是对象?
(1)对象是实际存在的个体。(真实存在的个体);例如: 宋小宝就是一个对象、姚明就是一个对象、刘德华就是一个对象
(2)宋小宝、姚明、刘德华这3个对象都属于“明星”这个类!
⭐️在java语言中,要想得到“对象”,必须先定义“类”,“对象”是通过“类”
类就是一个模板:类中描述的是所有对象的“共同特征信息”;对象就是通过类创建出的个体⭐️几个术语:
(1)类:不存在的,人类大脑思考总结一个模板(这个模板当中描述了共同特征。)
(2)对象:实际存在的个体。
(3)实例:对象还有另一个名字叫做实例。
(4)实例化:通过类这个模板创建对象的过程,叫做:实例化。
(5)抽象:多个对象具有共同特征,进行思考总结抽取共同特征的过程。
⭐️总结:类 --【实例化】--> 对象(实例)
对象 --【抽象】--> 类
⭐️类是一个模板,是描述共同特征的一个模板,那么共同特征包括什么呢?
例如:张三对象:
名字:张三
身高:165cm
打篮球:非专业的
学习:考试80分李四对象:
名字:李四
身高:240cm
打篮球:NBA专业球员
学习:考试100分⭐️共同特征包括哪些?
名字、身高都属于名词(状态特征);状态对应类中的属性
打篮球、学习都属于动词(动作特征);动作对应类中的方法
⭐️类 = 属性 + 方法;属性来源于:状态;方法来源于:动作public class 明星类{ //属性-->状态,多见于名词 名字属性; 身高属性; //方法-->动作,多见于动词 打篮球方法(){ } 学习方法(){ } }
❤️怎么定义一个类,语法格式是什么?
[修饰符列表] class 类名 { //类体 = 属性 + 方法 // 属性在代码上以“变量”的形式存在(描述状态) // 方法描述动作/行为 } //-------------注意:修饰符列表可以省略。
❤️为什么属性是“以”变量的形式存在的?
假设我们要描述一个学生: 学生包括哪些属性: 学号: 110 姓名:"张三" 性别:'男' (true/false) 住址:"深圳宝安区"
⭐️答:是因为属性对应的是“数据”,数据在程序中只能放到变量中。
⭐️结论:属性其实就是变量。⭐️变量根据出现位置进行划分:
(1)方法体当中声明的变量:局部变量。
(2)方法体外声明的变量:成员变量。(这里的成员变量就是“属性”)
❤️观察“学生对象1”和“学生对象2”的共同特征,然后再利用java语言将该“学生类”表述/表达出来。(这里只表达属性,不表达方法.)
⭐️观察学生对象的共同特征(只观察属性,属性是成员变量);有哪些共同特征:学号:采用int类型 姓名:采用String类型 年龄:采用int类型 性别:采用char或者boolean类型 住址:采用String类型
⭐️创建一个学生类XueSheng
public class XueSheng{ //--------------属性(成员变量) // 学号 int num; // 姓名 String name; // 年龄 int age; // 性别 boolean sex; // 住址 String addr; }
⭐️变量有一个特点:必须先声明,再赋值,才能访问。成员变量可以不手动赋值!XueSheng既是一个类名,同时又是一个“类型名”,属于引用数据类型。
⭐️创建一个学生类XueShengTest
(1)数据类型包括两种:
基本数据类型:byte short int long float double boolean char
引用数据类型:String、XueSheng.....
(2) java中所有的“类”都属于引用数据类型。public class XueShengTest{ public static void main(String[] args){ int i = 100; System.out.println("i = " + i); // 在这里可以访问XueSheng类吗?当然可以。 // 创建对象的语法:new 类名();类是模板,通过一个类,是可以创建N多个对象的。 //new是一个运算符。专门负责对象的创建。 //1. int i = 100; i是变量名 int是变量的数据类型 100是具体的数据。 XueSheng s1 = new XueSheng(); s1是变量名(s1不能叫做对象。s1只是一个变量名字。) XueSheng是变量s1的数据类型(引用数据类型) new XueSheng() 这是一个对象。(学生类创建出来的学生对象。) //2. XueSheng s1 = new XueSheng(); // 和 int i = 10;一个道理。 //3. 再通过该类创建一个全新的对象 XueSheng s2 = new XueSheng(); //4. 再创建一个 XueSheng xsh = new XueSheng(); // 以上的这个程序就相当于通过XueSheng类实例化了3个XueSheng对象。 // 创建对象的个数没有限制,可以随意。只要有模板类就行。 // 3个对象都属于学生类型。 } }
❤️例1:创建学生类并初始化打印
⭐️定义Stu类
public class Stu{
String name;
int age;
char sex;
}
⭐️定义Stu01类,并初始化打印
public class Stu01{
public static void main(String[] args){
Stu s = new Stu();
//根据类创建对象
s.name = "张三";
System.out.println(s.name);
s.age = 18;
System.out.println(s.age);
s.sex = '男';
System.out.println(s.sex);
}
}
❤️关于编译的过程:按说应该先编译XueSheng.java,然后再编译XueShengTest.java;但是对于编译器来说,编译XueShengTest.java文件的时候,会自动找XueSheng.class,如果没有,会自动编译XueSheng.java文件,生成XueSheng.class文件。
⭐️第一种方式:
javac XueSheng.java
javac XueShengTest.java
⭐️第二种方式:
javac XueShengTest.java
⭐️第三种方式:
javac *.java❤️怎么完成对象创建的呢?
类名 变量名 = new 类名();这样就完成了对象的创建。