面向对象设计中的五大原则
最近在看软考资料,正好遇到了一个与面向对象设计有关的题目,把五大原则拿出来好好复习一下。将五大原则分别是单一职责原则、开闭原则、里式替换换则、接口隔离原则、依赖倒转原则,将它们的英文首字母取出来就能组成单词 SOLID
,这些原则的主要宗旨是使软件维护和软件拓展变得更加容易。
单一职责原则
Single Responsibility Principle,每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。
英文原文如下:
A class should have one and only one reason to change, meaning that a class should have only one job.
这一原则有助于减少代码合并时的冲突,使代码的版本管理更加简单。
开闭原则
Open Close Principle,软件中的对象(类,模块,函数)应该对于拓展是开放的,但是对于修改是封闭的。
英文原文如下:
Objects or entities should be open for extension but closed for modification.
我们应该能够在不修改既有代码的前提下增加新的功能。
里氏替换原则
Liskov Substitution Principle,派生类(子类)对象可以在函数中代替其基类(超类)对象。
英文原文如下:
Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.
接口隔离原则
Interface Segregation Principle,客户(client)不应被迫使用对其而言无用的方法或功能。
英文原文如下:
A client should never be forced to implement an interface that it doesn’t use, or clients shouldn’t be forced to depend on methods they do not use.
派生类不应该需要实现其不使用的函数接口,如果存在这样的函数接口,应该把它们分离出来,单独形成一个新的基类。
依赖反转原则
Dependency Inversion Principle,高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。
英文原文如下:
Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions.
接口的依赖状态应该放在基类上,而不是派生类对象上。这样就避免了高层次模块对低层次模块的依赖。