面向对象的五大基本原理
1.单一职责原则(SRP)
-
类的功能要单一,不能包罗万象,跟杂货铺似的。
-
核心思想为:一个类,最好只做一件事,只有一个引起它的变化。
2.开放封闭原则(OCP)
-
对象或实体应该对扩展开放,对修改封闭。
-
更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有助,
-
坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!
-
核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭。
-
总结:“需求总是变化”没有不变的软件,所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被
-
需求的变化影响。
3.里氏替换原则(LSP)
-
在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类)
-
核心思想是:子类对象能够替换父类对象,而程序逻辑不变。
-
总结:里氏替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别
4.依赖倒置原则(DIP)
-
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。
-
我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。所以我们需要将食草动物设计为抽象类,即抽象类或接口。这样下层只需要实现相应的细节而不会影响父类。
-
其核心思想是:依赖于抽象。
-
将耦合紧密的两个模块进行分离接口和实现,主要依赖于接口编程。
-
总结:依赖于抽象,就是对接口编程,不要对实现编程。
5.接口隔离原则(ISP)
-
不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!
-
核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。
-
使用臃肿的接口,会造成实现类实现接口的所有方法,不管是它需要的还是不需要的,造成接口污染。
-
接口污染是指把接口做的过于“胖”,派生类必须实现某些它用不到的功能,这样不仅加大了接口间的耦合,而且带来不必要的复杂性,造成接口污染。
-
总结:遵守接口隔离原则,将“胖”接口拆分为独立的几个接口,各实现类分别与需要的接口类来建立依赖关系。