Java零基础(第八章)---》认识面向对象

目录

面向对象理论

面向过程(OP)

面向对象(OO)

面向对象三个术语和三大特征

类和对象

类的定义

编译的过程


知识框架

Java零基础(第八章)---》认识面向对象_第1张图片

面向对象理论

❤️面向过程和面向对象有什么区别?
    ⭐️从语言方面出发:
        (1)对于C语言来说,是完全面向过程的。
        (2)对于C++语言来说,是一半面向过程,一半是面向对象。(C++是半面向对象的)
        (3)对于Java语言来说,是完全面向对象的。

面向过程(OP)

❤️什么是面向过程的开发方式?
      ⭐️面向过程的开发方式主要的特点是:
          (1) 注重步骤,注重的是实现这个功能的步骤
                  第一步干什么
                  第二步干什么
                  ....
           (2) 面向过程也注重实现功能的因果关系
                   因为A所以B
                   因为B所以C
                   因为C所以D
                   .....
     ⭐️面向过程中没有对象的概念。只是实现这个功能的步骤以及因果关系。       

❤️面向过程有什么缺点耦合度高,扩展力差。)
     ⭐️面向过程最主要是每一步与每一步的因果关系,其中A步骤因果关系到B步骤,A和B联合起来形成一个子模块,子模块和子模块之间又因为因果关系结合在一起,假设其中任何一个因果关系出现问题(错误),此时整个系统的运转都会出现问题。

     ⭐️代码和代码之间的耦合度太高,扩展力太差!

     ⭐️螺丝螺母拧在一起:耦合度高吗?
           这是耦合度低的,因为螺栓螺母可以再拧开。(它们之间是有接口的。)
     ⭐️螺栓螺母拧在一起之后,再用焊条焊接在一起,耦合度高吗?
            这个耦合度就很高了。耦合度就是黏连程度。往往耦合度高的扩展力就差。

❤️面向过程有什么优点?(快速开发
     ⭐️对于小型项目(功能),采用面向过程的方式进行开发,效率较高。
     ⭐️不需要前期进行对象的提取,模型的建立,采用面向过程方式可以直接开始干活。一上来直接写代码,编写因果关系;从而实现功能。

❤️采用面向过程的方式开发一台计算机会是怎样?
      ⭐️这台计算机将没有任何一个部件,所有的都是融合在一起的。
      ⭐️这台计算机是一个实心儿的,没有部件的;一体机。(没有对象的概念。)
      ⭐️假设这台一体机的任何一个“部位”出问题,整个计算机就不能用了,必须扔掉了。

❤️采用面向对象的方式开发一台计算机会是怎样?
     ⭐️里面的部件都是一个对象;例如: 内存条是一个对象、主板是一个对象、CPU是一个对象、硬盘是一个对象等,然后这些对象组装在一起,形成一台计算机。
     ⭐️假设有一个部件CPU坏了,我们可以将CPU拆下来,换一个新的;就可以继续使用

面向对象(OO)

❤️什么是面向对象开发方式?
        ⭐️采用面向对象的方式进行开发,更符合人类的思维方式。(面向对象成为主流的原因)
        ⭐️人类就是以“对象”的方式去认识世界的。 所以面向对象更容易让我们接受。

❤️面向对象就是将现实世界分割成不同的单元,然后每一个单元都实现成对象,然后给一个环境驱动一下,让各个对象之间协作起来形成一个系统。
     ⭐️例如:对象“张三”、对象“香烟”、对象“打火机”、对象“吸烟的场所”;然后将以上的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只是面向对象编程语言中的一种。    

类和对象

Java零基础(第八章)---》认识面向对象_第2张图片

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

  ⭐️什么是类?
       (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 类名();这样就完成了对象的创建。

你可能感兴趣的:(#,JavaSE零基础,java)