最近在看软考资料,正好遇到了一个与面向对象设计有关的题目,把五大原则拿出来好好复习一下。将五大原则分别是单一职责原则、开闭原则、里式替换换则、接口隔离原则、依赖倒转原则,将它们的英文首字母取出来就能组成单词 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.

接口的依赖状态应该放在基类上,而不是派生类对象上。这样就避免了高层次模块对低层次模块的依赖。