面向对象与面向过程

什么是面向对象?

对比面向过程,是两种不同处理问题的角度,

面向过程更注重事情的每一个步骤以及顺序,面向对象更注重事情有哪些参与者(对象),以及各自需要做什么

比如:洗衣机洗衣服

面向过程:

会将任务拆解成一系列的步骤:

1、打开洗衣机

2、放衣服

3、放洗衣液

4、清洗

5、烘干

面向对象:

会拆出人和洗衣机两个对象;

以上例子就能看出,面向过程比较直接高效,而面向对象更易于复用,扩展和维护

面向对象的三大特征:封装、继承、多态

封装:

        1、概念:封装就是隐藏内部实现即对象的属性和实现细节,仅对外公开接口。

        2、封装实现的步骤:

                1、将属性私有化(设置为private)

                2、提供一个public的set方法,对属性进行设置(public修饰)

                3、提供一个public的get方法,用于获取属性(public修饰;注意!boolean变量的get方法是is开头。)

                4、只用于本类的辅助性方法,使用private修饰,希望其他类调用的方法用public修饰。

        3、封装的目的:

                增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以                  特定的访问权限来使用类的成员

继承:

        继承是面向对象的基本特征之一,继承就是子类继承父类的特征和行为,使得子类对象具有父类的所有属性和方法(private修饰的属性不能拥有),同时子类还可以拥有自己的专有“内容”。java中的继承是单继承,即一个类只有一个父类,子类知道父类是谁,而父类是不知道下面有几个子类的。

        继承主要解决的问题就是:共性抽取;父类更通用,子类更具体,解决代码重用,去掉代码冗余,为了多态服务,继承是多态的前提,如果没有继承,就没有多态。

        父类也可以叫基类、超类, 子类也可以叫派生类,一般我们用父子类来称呼。在继承的关系中就是is-a。

        在父子类继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

        1、直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有就往上找

        2、间接通过成员方法访问成员变量,该方法属于谁,就优先用谁,没有往上找

                 

          

                                                         

             

this、super,final关键字:

        1、this关键字代表当前对象

        2、super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。  

         

        3、 final 表示最终的意思,可以修饰类、成员变量、成员方法            

                修饰类:类不可以被继承

                修饰成员变量:变量为常量,值不可以改变

                修饰成员方法:方法不能被重写

                final还可以修饰局部变量:①修饰基本数据类型,值不能改变;②修饰引用数据类型,地址值不能改变

 

多态:

        多态是同一个行为具有多个不同表现形式或形态的能力。

        多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

        

多态的优点

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性

多态存在的三个必要条件(extends继承或者implements实现,是多态性的前提)

  • 继承
  • 重写
  • 父类引用指向子类对象 Parent p = new Child();

   

   

面向对象五大基本原则

         

单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。

开放封闭原则OCP(Open-Close Principle) 
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,
那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。

替换原则(the Liskov Substitution Principle LSP) 
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,
也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

依赖原则(the Dependency Inversion Principle DIP)

高层模块不应该依赖于底层模块,两者应该依赖于其抽象。

抽象不应该依赖具体实现,具体实现应该依赖抽象。

上面2点是依赖倒置原则的概念,也是核心。主要是说模块之间不要依赖具体实现,依赖接口或抽象。

其实依赖倒置原则的核心思想是面向接口编程。

接口分离原则(the Interface Segregation Principle ISP) 
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来

面向过程

面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。


 面向过程始终关注的是怎么一步一步实现的,通过控制代码,从而实现函数的顺序执行

优点:

流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。

效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

缺点:

需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值