面向对象设计原则
2026/10/7大约 4 分钟
面向对象设计原则
1. 考点:面向对象七大设计原则
- 单一职责原则 (Single Responsibility Principle, SRP) :设计目的单一的类。一个类应该只有一个引起它变化的原因。
- 开放-封闭原则 (Open-Closed Principle, OCP) :对扩展开放,对修改封闭。这意味着软件实体应当在不修改已有代码的基础上扩展其功能。
- 里氏替换原则 (Liskov Substitution Principle, LSP) :子类可以替换父类。所有引用基类的地方必须能透明地使用其子类的对象。
- 依赖倒置原则 (Dependency Inversion Principle, DIP) :要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程。
- 接口隔离原则 (Interface Segregation Principle, ISP) :使用多个专门的接口比使用单一的总接口要好。客户端不应该依赖那些它不需要的接口。
- 组合/聚合复用原则 (Composite/Aggregate Reuse Principle, CARP) :要尽量使用组合,而不是继承关系达到复用目的。
- 迪米特法则 (Law of Demeter, LoD / 的最少知识法则) :一个对象应当对其他对象有尽可能少的了解。也就是说,一个软件实体应当尽可能少地与其他实体发生相互作用。
2. 考点:面向对象设计其他原则(包设计原则)
- 重用发布等价原则 (Reuse/Release Equivalence Principle, REP) :重用的粒度就是发布的粒度。
- 共同封闭原则 (Common Closure Principle, CCP) :包中的所有类对于同一性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包里的所有类产生影响,而对于其他的包不造成任何影响。
- 共同重用原则 (Common Reuse Principle, CRP) :一个包里的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
- 无环依赖原则 (Acyclic Dependencies Principle, ADP) :在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的无环图形。
- 稳定抽象原则 (Stable Abstractions Principle, SAP) :包的抽象程度应该和其稳定程度一致。
- 稳定依赖原则 (Stable Dependencies Principle, SDP) :朝着稳定的方向进行依赖。
3. 经典例题
3.1 题目一
题目: 进行面向对象设计时,就一个类而言,应该仅有一个引起它变化的原因,这属于( )设计原则。
- A、单一责任
- B、开放-封闭
- C、接口分离
- D、里氏替换
【解析】
正确答案:A
解析说明:
关于选项 A(单一责任) :单一责任原则(Single Responsibility Principle, SRP)是指就一个类而言,应该仅有一个引起它变化的原因。即一个类只负责一项职责。题干描述完全符合单一责任原则。
其他选项说明:
- B、开放-封闭:软件实体(类、模块、函数等)应该可以扩展,但是不可修改。
- C、接口分离:使用多个专门的接口比使用单一的总接口要好。
- D、里氏替换:子类型必须能够替换掉它们的父类型。
正确答案:A(单一责任)。
3.2 题目二
题目: 进行面向对象系统设计时,针对包中的所有类对于同一类性质的变化;一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。这属于( )设计原则。
- A、共同重用
- B、开放-封闭
- C、接口分离
- D、共同封闭
【解析】
正确答案:D
解析说明:
关于选项 D(共同封闭) :共同封闭原则(Common Closure Principle, CCP)是指包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。题干描述完全符合共同封闭原则。
其他选项说明:
- A、共同重用:一个包中的所有类应该是共同重用的,如果重用了包中的一个类,那么就应该重用包中的所有类。
- B、开放-封闭:软件实体应该对扩展开放,对修改关闭。
- C、接口分离:使用多个专门的接口比使用单一的总接口要好。
正确答案:D(共同封闭)。
