什么是面向对象(OOP)
OOP (面向对象编程,Object Oriented Programming)
OOD(面向对象设计,Object Oriented Design)
OOA(面向对象的分析,Object Oriented Analysis)
说面向对象,有必要先谈一下面向过程:
很早以前的面向编程是面向过程的,比如实现一个算数运算1+1=2,通过这个简单的算法就可以解决问题,但是随着时代的进步,人们不满足现有的算法了,因为问题越来越复杂,不是1+1那么单纯了,比如一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象,将显示的事物抽象出来,注意抽象这个词是重点,把现实生活的事物以及关系,抽象成类,通过集成,实现,组合的方式把万事万物都给容纳了,实现了对现实世界的抽象和模拟
面向对象是从抽象到具体的编程思想
举个简单的例子,比如你想吃鱼香肉丝,你现在有两个选择:
1,自己买肉,买鱼香肉丝调料,买蔬菜等等然后切菜,切肉,开炒,盛到盘子里
2,去饭店,张开嘴:老板!来一份鱼香肉丝
第一个选择就是面向过程,第二个就是面向对象
面向对象有什么优势呢?首先你不需要知道鱼香肉丝是怎么做的,降低了耦合性( 降低耦合性,可以提高其模块的独立性),如果你突然不想吃鱼香肉丝了,想吃洛阳白菜,对于1你可能太不容易了,还需要重新买菜,买调料什么的,对于2,太容易了,大喊:老板!那个鱼香肉丝换成洛阳白菜吧,提高了可维护性,总的来说就是降低耦合性,提高维护性!
面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现
面向对象是模型化的,你只需要抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法,需要什么功能直接使用就可以了,不必一步一步的实现,至于这个功能如何实现的,关我们什么事,我们会用就可以了。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。
面向过程:
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源
缺点:不易维护,不易复用,不易扩展
面向对象:
优点:易维护,易复用,易扩展,由于对象对象有封装继承多态的特性,可以设计出低耦合的系统,使系统更加灵活,更加易用维护
缺点:性能比面向过程差
面向对象的三大特性:
1,封装:一般使用关键字private将事物的属性和实现细节隐藏,对外界只提供公共的访问方式,提高了程序的安全型,易用性和复用性
2,继承:使用关键字extenda在两个类之间建立一种父子类关系,就是继承,提高代码复用性,继承是多态的前提
3,多态:在继承的前提下,可以用父类的引用指向子类的实例对象,通过父类调用子类中重写了父类的方法,提高程序的扩展性,降低程序的冗余
面向对象的五大原则:
1,单一职责原则SRP(Single Responsibility Principle)
类的功能要单一,不能包罗万象,跟杂货铺似的
2,开放封闭原则OCP(Open-Close Principle)
一个模块对于扩展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,一万个不乐意
3, 里式替换原则LSP(the Liskov Substitution Principle LSP)
子类可以替换父类出现在父类能够出现的任何地方,比如你能代表你爸去你姥姥家干活,哈哈
4, 依赖倒置原则DIP(the Dependency inversion Principle DIP)
高层次的模块不应该依赖低层次的模块,他们都应该依赖于抽象,抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是说你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面具体有xx省,xx市,xx县。你要依赖的是抽象的中国人,而不是你是xx村的
5, 接口分离原则SP(the Interface Segregation Principle ISP)
设计时采用多个与客服端有关的接口比采用1个通用的接口要好,就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好得多
最后:
1,抽象会使复杂的问题更加简单化
2,从以前面向过程的执行者,变成了张张嘴的指挥者
3,面向对象更加符合人类的思维,面向过程则是机器的思维
<小康>