什么是面向对象(OOP)
Object Oriented Programming
对比面向过程,是两种不同的处理问题的角度
- 面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么。
- 举例
- 自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
- 去饭店,张开嘴:老板!来一份鱼香肉丝!
面向过程:
- 是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
- 优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
- 缺点:不易维护、不易复用、不易扩展
面向对象:
- 底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。
- 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
- 缺点:性能比面向过程差
面向对象的三大特性:
封装
- 封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项
- 内部细节对外部调用透明,外部调用无需修改或者关心内部实现
- 隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
继承
- 继承基类的方法,并做出自己的改变和/或扩展
- 子类共性的方法或者属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的
- 提高代码复用性;继承是多态的前提。
多态
- 基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。
- 继承,方法重写,父类引用指向子类对象(无法调用子类特有的功能)
- 提高了程序的拓展性。
五大基本原则:
-
单一职责原则SRP(Single Responsibility Principle)
- 类的功能要单一,不能包罗万象,跟杂货铺似的。
-
开放封闭原则OCP(Open-Close Principle)
- 一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。
-
里式替换原则LSP(the Liskov Substitution Principle LSP)
- 子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。
-
依赖倒置原则DIP(the Dependency Inversion Principle DIP)
- 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的是抽象的中国人,而不是你是xx村的。
-
接口分离原则ISP(the Interface Segregation Principle ISP)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
总结
1、抽象会使复杂的问题更加简单化。
2、从以前面向过程的执行者,变成了张张嘴的指挥者。
3、面向对象更符合人类的思维,面向过程则是机器的思想
参考:https://blog.csdn.net/qq_23062979/article/details/83552322