软件构造5.1

软件维护和演化

修复错误,改善性能
软件的大部分成本来自于维护阶段
在设计开发阶段就要考虑将来的可维护性easy to change

维护指标

maintainability 可维护性
extensibility 可扩展性
flexibility 灵活性
adaptability 可适应性
manageability 可管理性
supportability 支持性

模块化设计与模块化原则

模块化编程

高内聚,低耦合

  • 评价标准
    • 可分解性
    • 可组合性
    • 可理解性
    • 可持续性 发生变化时受影响范围最小
    • 出现异常之后的保护 出现异常后受影响的范围最小
  • 模块化设计规则
    • 直接映射
    • 尽可能少的接口
    • 尽可能小的接口
    • 显示接口
    • 信息隐藏
  • 松耦合和高内聚
    耦合:测量模块之间的依赖程度
    内聚:测量一个模块的功能之间得紧密性

OO设计原则 SOLID

SRP 单一责任原则

不应该有多于一个原因让你的ADT发生变化,否则就拆分开
一个类,一个责任
软件构造5.1

OCP 开放/封闭原则

  • 对扩展性的开放
    • 模块的行为可扩展,从而该模块可表现出新的行为以满足需求的变化
  • 对修改的封闭
    • 模块自身的代码不应被修改
    • 扩展模块行为的一般途径是修改模块的内部实现
    • 一个模块不能被修改,那么它通常被认为具有固定的行为
      关键的解决方案:抽象技术
      软件构造5.1

LSP liskov替换原则

ISP接口隔离原则

不能强迫客户端依赖于他们不需要的接口,只提供必须的接口
软件构造5.1

DIP依赖转职原则

抽象的模块不因依赖于具体的模块
具体应依赖于抽象
软件构造5.1
delegation时候,用interface建立联系

OO设计原则 GRASP

通用责任分配模式,关于如何为类和对象指派职责的一系列原则