- 隔离变化, 适应软件的变化, 使得变化带来的影响最小。
- 各司其职, 新增的变化不应该影响原来类型的实现。
- 对象是什么:
- 语言: 封装代码和数据
- 规格: 一系列可被用的公共接口
- 概念: 有责任的抽象
-
依赖倒置原则(Dependence Inversion Principle):
- 高层模块(稳定)不应该依赖于底层模块(变化), 二者都应该依赖于抽象(稳定)
- 抽象不应该依赖于细节, 细节应该依赖于抽象。
-
开放封闭原则(Open Closed Principle):
- 对扩展开放, 对修改封闭
- 类模块可扩展, 但是不可修改
-
单一职责原则(Single Responsiblity Principle):
- 一个类仅有一个引起它变化的原因
- 变化的方向隐含着类的责任
-
Liskov替换原则
- 子类必须可以替换基类, Effective C++ 中 public继承是 is-a 的关系
-
接口隔离原则(Interface Segeration Principle)
- 接口应该小而完备
- 不应该让客户依赖于它们不用的方法
-
优先使用对象组合而不是类继承
- 继承破坏了封装性, 子类父类的耦合度高
- 类继承称为白箱复用, 组合称为黑箱复用
- 而对象组合只是要求对象有良好定义的接口, 耦合度低
-
封装变化点
- 实现封装来创建对象的分界层, 可以让设计者在一侧修改而不影响另一侧, 从而实现实现层的松耦合
-
针对接口编程, 而不是针对实现编程
- 不将变量类型声明为具体类, 而是声明为接口
- 客户程序无需知道对象的具体类型, 而应该知道对象的所具有的接口
- 减少系统中的各部分的依赖关系
- Design Idioms: 与特定语言相关的惯用法和技巧
- Design Patterns: 描述类和对象之间的组织关系
- Architectural Patterns:子系统的划分以及它们之间的关系, 描述与基本结构组织关系密切的高层模式