OOP,Object Oriented Programming,就是面向对象的编程啊,还有OOD(面向对象的设计),OOA(面向对象的分析)。那什么是面向对象呢?要想了解这个问题咱们要先了解面向过程,这样对比咱们就好理解了。算法
很早很早之前的编程是面向过程的,好比实现一个算术运算1+1 = 2,经过这个简单的算法就能够解决问题。可是随着时代的进步,人们不知足现有的算法了,由于问题愈来愈复杂,不是1+1那么单纯了,好比一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象。将现实的事物抽象出来,注意抽象这个词是重点啊,把现实生活的事物以及关系,抽象成类,经过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。编程
举个最简单点的例子来区分 面向过程和面向对象安全
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择性能
一、本身买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等而后切菜切肉,开炒,盛到盘子里。设计
二、去饭店,张开嘴:老板!来一份鱼香肉丝!视频
看出来区别了吗?这就是1是面向过程,2是面向对象。对象
面向对象有什么优点呢?首先你不须要知道鱼香肉丝是怎么作的,下降了耦合性。若是你忽然不想吃鱼香肉丝了,想吃洛阳白菜,对于1你可能不太容易了,还须要从新买菜,买调料什么的。对于2,太容易了,大喊:老板!那个鱼香肉丝换成洛阳白菜吧,提升了可维护性。总的来讲就是下降耦合,提升维护性!继承
面向过程是具体化的,流程化的,解决一个问题,你须要一步一步的分析,一步一步的实现。接口
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。须要什么功能直接使用就能够了,没必要去一步一步的实现,至于这个功能是如何实现的,管咱们什么事?咱们会用就能够了。游戏
面向对象的底层其实仍是面向过程,把面向过程抽象成类,而后封装,方便咱们咱们使用的就是面向对象了。
面向过程:
优势:性能比面向对象好,由于类调用时须要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.
优势:易维护、易复用、易扩展,因为面向对象有封装、继承、多态性的特性,能够设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差
一、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提升复用性和安全性。
二、继承
提升代码复用性;继承是多态的前提。
三、多态
父类或接口定义的引用变量能够指向子类或具体实现类的实例对象。提升了程序的拓展性。
一、单一职责原则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)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就好比一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分红不一样的接口,比在一个接口里要好的多。
一、抽象会使复杂的问题更加简单化。
二、从之前面向过程的执行者,变成了张张嘴的指挥者。
三、面向对象更符合人类的思惟,面向过程则是机器的思想
连接:https://www.jianshu.com/p/7a5b0043b035来源:简书