一、面向对象三大特征
面向对象的基本特征大家都是耳熟能详了,如封装、继承、多态。其实,如果将抽象作为面向对象的基本特征也是可以的。
1.1、抽象
定义:抽象就是提取一类事物的共同个性。
分类:(1)对数据的抽象,也就是对象的属性。(2)对过程的抽象,也就是对象的行为特征,好比Java中的接口。
1.2、封装
定义:把对象的属性和行为结合作为一个整体,并且隐藏对象的内部细节,只对外开放部分的公共访问方式
好处:(1)隐藏内部的实现细节;(2)良好的封装减少耦合;(3)对成员变量更精细的控制和代码的自由修改。
1.3、继承
定义:从已有的类派生出新类,并且新类拥有已有类的属性和行为,并可以扩展新的功能。
好处:(1)父类具备的功能,子类可以直接继承,提高了代码的重用性;(2)为多态提供基础;
1.4、多态
定义:同一个行为具有多个不同的表现形式或者形态的能力(直白的说就是不同的对象对同一个事情的发生会产生不同的反应或者结果而已)。
分类:(1)编译时多态,通过重载实现多态;(2)运行时多态,通过重写实现多态
好处:(1)消除类型之间的耦合关系;(2)灵活性;(3)扩展性
多态存在的必要条件:(1)有继承关系;(2)运行时多态,即重写;(3)父类指向子类的引用
二、基本原则
设计模式作为一类的问题的有效的解决方案,也存在一些基本的原则
2.1、开闭原则
意思:对扩展开放,对修改关闭。在需要对程序进行扩展时,不能修改原有的代码(吐槽一下,谁知道原始的代码改了会不会对其他功能有影响,毕竟有的代码凌乱的跟屎一样),而是要实现一个类似热拔插的效果,这样的话就需要借助接口或者抽象类来实现。
2.2、里氏替换原则
意思:只要基类可以出现的地方,子类一定可以出现,并且可以正常运行不受影响。里氏替换原则是对开闭原则的一个补充,因为开闭原则的关键就是抽象化,而基类和子类的继承关系是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。
2.3、依赖倒转原则
意思:(1)高层次的模块不应该依赖低层次的模块,应该依赖于抽象;(2)抽象不应该依赖于具体实现,而是实现应该依赖于抽象
好处:就是解决耦合问题
可以理解为是开闭原则的基础,针对接口和抽象编程
2.4、接口隔离原则
意思:使用多个隔离的接口,比使用单一的大而全的接口要好
好处:降低类的耦合程度,便于维护
2.5、迪米特法则(最少知道原则)
意思:一个实体类应该尽量少的与其他的实体之间发生相互作用,使得各个实体之间相互独立
好处:使得系统的模块之间相对独立
2.6、合成复用原则
意思:多使用组合或者聚合,而不是继承
好处:组合是有的关系,而继承是是的关系,继承也可以说是破坏了封装性
三、总结
虽然面向对象的基本原则定义的很全面,有了一个良好的规范,但是在实际coding过程中,无法面面俱到,根据实际情况,有取舍,好比设计模式也一样,很多地方也不符合面向对象的设计原则
自勉:
接触新事物,学习的过程就是自己的积攒过程,可能简单或者有错误,但是谁不是一个学习积攒的过程那,没有所谓的天才,只有拼搏和努力。