面向过程与面向对象

时间:2022-05-17 19:48:18

面向过程与面向对象

        我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。

        在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。

        那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。

        面向过程的代表语言:C语言

        当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

        面向对象是基于面向过程的编程思想。

 

——面向对象编程思想

        ——面向对象思想概述

                      面向对象是基于面向过程的编程思想

        ——面向对象思想特点

                      是一种更符合我们思想习惯的思想;

                      可以将复杂的事情简单化;

                      将我们从执行者变成了指挥者;

        ——面向对象思想举例

                      买电脑

面向过程:走到电脑城—》根据需求选配置—》谈价钱—》交易—》走着回来

面向对象:想买电脑了—》张克帮我买回去-》给钱

                      洗衣服

面向过程:脱—》盆—》接水自己洗—》到洗衣液—》漂洗—》拧干—》甩一甩—》晾晒

面向对象:脱—》让对象洗—》穿

 

                      万事万物皆对象

     

 

——类和对象  

         类:是一组相关的属性和行为的集合

        对象:是该类事物的具体体现

           类:可以理解为构造对象的一个蓝图或者模版,是抽象的概念

           对象:是以类为模型创建的具体实例,是对类的一种具体化。

 

      

 

 

 

 

——类的定义

        现实世界的事物

               属性:人的身高,体重等

               行为:人可以学习,吃饭等

        Java中用class描述事物也是如此

               成员变量:就是事物的属性

               成员方法:就是事物的行为

        定义类其实就是定义类的成员(成员变量和成员方法)

 

——this

       代表所在类的对象引用

       记住:方法被哪个对象调用,this就代表那个对象

       ——什么时候使用this呢?

              现阶段,局部变量隐藏成员变量;

              其他用法后面和super一起讲解

 

——封装

         指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

         ——好处

                隐藏实现细节,提供公共的访问方式;

                提高了代码的复用性;

                提高安全性;

 

 

         ——封装原则:

                将不需要对外提供的内容都隐藏起来;

                把属性隐藏,提供公共方法对其访问;

 

——private

        是一个权限修饰符。

       可以修饰成员(成员变量和成员方法)

       private修饰的成员只在本类中才能访问。

        ——private最常见的应用

               把成员变量用private修饰,提供对应的getXxx()/setXxx()方法

 

——构造器(构造方法)

        创建对象时使用的一个特殊的方法

        ——构造方法格式

               方法名与类名相同;

               没有返回值类型,连void都没有;

        ——构造方法注意事项

               如果你不提供构造方法,系统会给出默认构造方法;

               如果你提供了构造方法,系统将不再提供;

               构造方法也是可以重载的;

               如果在构造方法中使用this,那么this必须放在第一句;

 

               虽然构造方法没有返回值,但是也可以写一个return,在最后写return;这种做法在任何void类型的方法最后都是没有问题的。

 

 

 

——继承

       多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

       ——Java中如何实现继承

              通过extends关键字可以实现类与类的继承

class 子类名extends父类名 {} 

              单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

              有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员

       ——使用继承的利弊

              ——继承的好处

                    提高了代码的复用性

                         多个类相同的成员可以放到同一个类中

                     提高了代码的维护性

                         如果功能的代码需要修改,修改一处即可

                     让类与类之间产生了关系,是多态的前提

              ——继承的弊端

                     让类与类之间产生了关系,是多态的前提

                     其实这也是继承的一个弊端:类的耦合性很强

设计原则:高内聚低耦合。

        简单的理解:内聚就是自己完成某件事情的能力;耦合就是类与类之间的关系。

        我们在设计的时候原则是:自己能完成的就不麻烦别人,这样将来别人产生了修改,就对我的影响较小。由此可见:在开发中使用继承其实是在使用一把双刃剑。

 

 

 

 

 

 

 

              ——继承的特点

                     ——Java只支持单继承,不支持多继承。

                    一个类只能有一个父类,不可以有多个父类。

                    classSubDemo extends Demo{} //ok

                     class SubDemo extendsDemo1,Demo2...//error

                    ——Java支持多层继承(继承体系)

                           class A{}

                           class B extends A{}

                           class C extends B{}

              ——继承中的注意事项

                      子类只能继承父类所有非私有的成员(成员方法和成员变量);

                          其实这也体现了继承的另一个弊端:打破了封装性

                     子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法;

                      不要为了部分功能而去继承

              ——super

                     super的用法和this很像,this代表本类对应的引用;super代表父类存储空间的标识(可以理解为父类引用)

                    ——用法(this和super均可如下使用):

                           访问成员变量

                                   this.成员变量     super.成员变量

                           访问构造方法(马上讲)

                                   this(…)  super(…)

                           访问成员方法(马上讲)

                                   this.成员方法()   super.成员方法()

 

              ——继承中构造方法的关系

                    子类中所有的构造方法默认都会访问父类中空参数的构造方法;

                    为什么呢?[1] 

                    如何父类中没有构造方法,该怎么办呢?
[2] 

              ——继承中成员方法的关系

                    首先在子类中找

                    然后在父类中找

                    如果还是没有就报错。(不考虑父亲的父亲…)

              ——方法重写

                    子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。

                    ——使用特点

                           如果方法名不同,就调用对应的方法;

                           如果方法名相同,最终使用的是子类自己的;

                    ——方法重写的应用

                           当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

                   ——方法重写的注意事项

                          父类中私有方法不能被重写;

                          子类重写父类方法时,访问权限不能更低;

                          父类静态方法,子类也必须通过静态方法进行重写;


 

因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。

每一个构造方法的第一条语句默认都是:super()

 

 

1、子类通过super去显示调用父类其他的带参的构造方法

2、子类通过this去调用本类的其他构造方法

本类其他构造也必须首先访问了父类构造

 

一定要注意:

super(…)或者this(….)必须出现在第一条语句山

否则,就会有父类数据的多次初始化