什么是面向对象?
面向对象就是在一个事务(问题)中,将一个事务(问题)的某些共同特性封装在一个对象中,创建对象不是为了完成某个步骤,而是完成整个事务中某种行为。
什么是面向过程?
面向过程就是在一个事务(问题)中,将事务划分为一个个步骤,通过函数实现这些步骤,然后依次调用执行即可。
举个简单点的例子来区分面向对象和面向过程
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择:
- 自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
- 去饭店,张开嘴:老板!来一份鱼香肉丝。
看出来区别了吗?这就是1是面向过程,2是面向对象。
面向对象和面向过程的区别
- 面向对象是模型化的,你只需要抽象出一个类,这是一个封闭的盒子(黑匣子),在这个对象中有你想要的数据以及解决问题的方法,需要什么功能直接使用就好,我们不必去了解它怎么实现的。面向对象的底层其实还是面向过程的,把面向过程抽象成类,然后进行封装,供我们使用就是面向对象了。
- 面向过程是具体化,流程化。解决一个问题,需要一步步的分析,并且通过函数形式将这些步骤一步步实现,然后依次调用。
面向对象和面向过程各自的优缺点
面向对象
- 优点:易维护,易复用,易扩展,因为面向对象有继承,封装,多态的特点,可以降低系统的耦合,使系统更加的灵活,易于扩展。
- 缺点:性能相对较差。
面向过程
- 优点:性能相对较好,因为面向对象需要实例化对象,开销较大,比较消耗资源。
- 缺点:不易于维护,不易于复用以及不易于扩展。
面向对象的三大特性
- 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
- 继承:提高代码复用性;继承是多态的前提。
- 多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
五大基本原则
- 单一职责原则:类的功能要单一,不能包罗万象,一个类对应一种行为或者动作。
- 开放封闭原则:一个模块对于拓展是开放的,对于修改是封闭的。
- 里式替换原则:子类可以替换父类出现在父类能够出现的任何地方,因为继承的原因,子类拥有父类的显示的属性和方法,也就可以使用父类的相关功能和属性,就可以实现替换父类的功能。
- 依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
- 接口分离原则:设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好,可以类比单一职责原则。
总结
- 抽象会使复杂的问题更加简单化。
- 从以前面向过程的执行者,变成了指挥者。
- 面向对象更符合人类的思维,面向过程则是机器的思想。