面向对象的几个原则
面向对象的几个原则七大基本原则单一职责原则开放封闭原则⭐️里氏替换原则接口隔离原则依赖倒置原则(DIP)迪米特原则组合/聚合复用原则
面向对象开发来说,有那么几个原则需要了解、理解、实践中反思和践行。
面对对象和面对过程的区别在于,面向对象提升了抽象级别。
抽象本身就是分治的逆向使用。
软件越来越庞大,很难处理过来,所以通过抽象,对软件复杂度进行分级降级。所以抽象的目的就是软件计算的核心目标:复杂度管理。
我对面向对象编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性问题的方式。这个问题可以追溯到亚里士多德:您把 这个世界视为过程还是对象?在面向对象兴起运动之前,编程以过程为中心,例如结构化设计方法。然而,系统已经达到了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统-----我认为,这才是面向对象编程运动的真正胜利。
----Grady Booch
七大基本原则
-
单一职责原则(SRP, Single responsibility principle)
-
开放封闭原则(OCP, Open closed principle)
-
里氏替换原则(LSP)
-
接口隔离原则(ISP,Interface segregation principle)
-
依赖倒置原则(DIP, Dependence inversion principle)
-
迪米特原则(LOD)
-
组合/聚合复用原则
单一职责原则
定义:规定一个类应该只有一个发生变化的原因。
核心目的:解耦和增强内聚性。
难点:职责的划分
职责:是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。
单一职责原则从职责(改变理由)的侧面上为我们对类(接口)的抽象的颗粒度建立了判断基准:在为系统设计类(接口)的时候应该保证它们的单一职责性。
降低了类的复杂读、提高类的可读性、提高系统的可维护性、降低变更引起的风险。
开放封闭原则⭐️
定义:对于扩展是开放的,对于修改是封闭的。
核心目的:确保可拓展性。
难点:抽象
实现开闭原则的关键在于“抽象”。把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体实现必须提供的方法的特征。作为系统设计的抽象层,要预见所有可能的扩展,从而使得在任何扩展情况下,系统的抽象底层不需修改;同时,由于可以从抽象底层导出一个或多个新的具体实现,可以改变系统的行为,因此系统设计对扩展是开放的。
在软件开发过程中,一直都是提倡需求导向的。这就要