目录
5.1 可维护性的度量与构造原则
1、可维护性:
- 指可以扩展,可以改变
- 又称可扩展性,灵活性,可适应性,可管理性,支持性等
- 类型:纠错性维护(25%)、适应性维护(21%)、完善性维护(50%)、预防性维护(4%)
2、可维护性关注的问题:
- 设计结构的简洁性
- 模块之间的离散性、聚合性
- 继承与委派
- 代码的圈/环复杂度
- 重复代码的问题
3、模块化编程:
- 目的:高内聚低耦合;分离关注点 (通过delegation等机制分离功能);信息隐藏 (避免表示泄露、静态工厂方法等等)
评估标准:
- 可分解性(Decomposability):
- 将问题分解为各个可独立解决的子问题
- 目标:使模块之间的依赖关系显示化和最小化
- 可组合性(Composability):
- 可容易地将模块组合起来形成新的系统
- 目标:使模块可在不同的环境下复用
- 可理解性(Understandability):
- 每个 子模块都可被系统设计者容易地理解
- 可持续性(Continuity):发生变化时受影响范围最小
- 模块提供的所有服务应该通过统一标识提供
- 出现异常之后的保护:出现异常后受影响范围最小
4、模块化设计的五个原则:
- Direct Mapping (直接映射)
- Few Interfaces (尽可能少的接口)
- Small Interfaces (尽可能小的接口)
- Explicit Interfaces (显式接口)
- Information Hiding (信息隐藏)
5、高内聚、低耦合:
-
高内聚:模块内部的功能之间的联系要紧密,无关的功能之间要分离成不同的模块
-
低耦合:模块之间的关系要越松散越好
6、SOLID原则:
- (SRP) The Single Responsibility Principle --------- 单一责任原则
- (OCP) The Open-Closed Principle ------------------- 开放-封闭原则
- (LSP) The Liskov Substitution PrincipleLiskov ---- 替换原则
- (DIP) The Dependency Inversion Principle -------- 依赖转置原则
- (ISP) The Interface Segregation Principle ---------- 接口隔离原则
- 2.单一责任原则(SRP):
- ADT中不应该有多于一个原因让其发生变化,否则就拆分开
- 责任:变化的原因
- 反例:
一个类,一个责任
2.开放-封闭原则(OCP):
- 对扩展性的开放:
-
模块的 行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化
-
- 对修改的封闭:
-
模块自身的代码是不应被修改的
-
扩展模块行为的一般途径是修改模块的内部实现
-
如果一个模块不能被修改,那么它通常被认为是具有固定的行为
-
-
关键的解决方案:抽象技术
-
对扩展性的开放,对修改的封闭
3.替换原则(LSP):
派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异
子类型必须能够替换其基类型
4.依赖转置原则(DIP)
- 高层模块不应该依赖于低层模块,二者都应该依赖于抽象
-
抽象不应该依赖于实现细节,实现细节应该依赖于抽象
具体的模块应该依赖于抽象的模块,但抽象的模块不应依赖于具体的模块
5.接口隔离原则(ISP):
避免接口污染,避免胖接口
大接口分解为多个小的接口