一、面向对象(OO)原则
面向对象OO七大原则为:
1.单一职责原则(Single Responsibility Principle)
- 一个类或者方法只负责一个功能点
- 对一个类来说,应该仅有一个引起它变化的原因
- 单一职责原则既简单也难运用,简单是它易于理解,一个类(大到模块,小到方法)承担的职责越多,被复用的可能性就越低,耦合度就高,一个职责变化会影响其它职责。难运用因为职责的界限比较难划分,跟实际所处环境和背景相关。
2.开闭原则(Open Close Principle)
-
对扩展开放,对修改关闭; 系统中的模块、类或者方法对提供者(开发者)是开放的,可以对现有系统功能进行扩展(新增)功能, 系统中的模块、类或者方法对使用者(调用者)是关闭的,使用者不用因为提供方新增功能而导致使用者要跟着修改,扩展和新增功能不直接修改已有代码
-
当需求发生变化时,应该通过增加新的代码来扩展现有功能,而不是直接修改已有代码
3.里氏替换原则(Liskov Substitution Principle)
- 将一个父类对象替换成它的子类对象后,不会影响程序的执行结果
- 简单来说,子类可以扩展父类的功能,但不能改变父类的原来的功能(尽量不要重写父类方法)
(1)优点
- 代码复用,子类拥有父类的方法和属性
(2)缺点
- 继承是侵入性,降低代码灵活性,一旦继承,子类就拥有父类的方法和属性,多一份约束
- 增加耦合性,当父类属性和方法被修改时,需要考虑子类的修改
- 一个类只能继承一个父类(java)
- 要真正做到不重写父类方法是一种理想状态
里氏替换原则最初由Barbara Liskov在1987年的一次学术会议中提出,而真正正式发表是在1994年,Barbara Liskov 和 Jeannette Wing发表的一篇学术论文《A behavioral notion of subtyping》, Liskov是美国第一个计算机科学女博士
4.依赖倒置原则(Interface Segregation Principle)
- 不要依赖具体,要依赖抽象(接口)
- 抽象不应该依赖实现,实现应该抽象
- 面向接口编程,不要面向实现编程
降低类间的耦合性,提高代码的可读性和可维护性
5.接口隔离原则(Dependence Inversion Principle)
- 提供单一接口,不要提供臃肿庞大的接口
- 尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法
接口隔离能有效降低类对接口的依赖性,从而降低耦合性,同时也应该避免盲目过度拆分接口,造成接口类冗余。
6.合成/聚合复用原则(Composite/Aggregate Reuse Principle CARP)
- 尽量使用对象组合取代继承来达到复用的目的
(1) 组合复用(Has-A)
在新类中通过组合关系来使用已有的类,使其成为新类的一部分,新类可以委派调用已有类的方法达到功能复用的目的,已有类内部实现细节对于新类不可以见,所以又称“黑箱”复用.
(2) 继承复用(Is-A)
通过继承已有类,让新类拥有已有类(父类)的方法和属性以达到复用功能的目的, 继承会把父类的实现细节暴露给子类,所以又称“白箱”复用.
组合复用和继承复用都能达到复用的目的,但是继承复用会破坏系统的封装性,父类发生变化,子类需要相应发生变化,而合同复用更加灵活,耦合度更低
7.迪米特法则(Law Of Demeter)
-
尽量降低类与类之间的耦合,一个类依赖的类越少越好。
-
该法则也叫最少知道原则, 一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友类通信,对于出现在成员变量、方法的输入和输出参数中的类都可以被称为直接朋友,而出现在方法体内部的类不属于朋友类即陌生人
-
比如有三个类A、B、C,现在A类只需要调用B类的方法,B类则去调用C类的属性,如果此时A类中出现了C类的对象,就相当于A类和C类发生了耦合关系,但实际上两者并不相关,并没有联系。此时B类应该完成处理C类的属性以及方法再将结果返回给A类,而A类也不需要出现C类即可
OO七大原则是包含Solid原则的,Solid原则是七大原则中前5个的首写字母, 软件编程总原则:低耦合,高内聚
网友评论