[浪子学编程][读书笔记]-道法自然之设计方法
道法自然-面向对象实践指南
-
设计方法:面向过程 vs. 面向对象
-
设计方法
-
面向过程
-
优点
- 结构简单
- 开发速度快
-
缺点
- 全局变量多,各个功能函数共同访问,需求变更时改动量大,易遗漏
- 函数耦合度大,提取公共函数则导致函数数量剧增,调用关系繁冗不堪
- 回调函数无法预知,管理困难
-
优点
-
面向对象
-
优点
- 真实模拟现实事务特征
- 耦合度低
- 复用性、扩展性高
-
缺点
- 结构复杂
- 初期开发速度相对较慢
-
优点
-
剑在我心
-
面向对象
- 软件需要较强的复用性
- 软件需要较强的扩展性
-
面向过程
- 规模小
- 没必要考虑扩张性,复用性
-
面向对象
-
面向过程
-
设计质量
-
衡量标准
- 是否满足功能性需求
- 可读性
- 可复用性
- 可扩展性
- 可维护性
-
具体标准
-
高内聚
- 一个模块、类或函数所承担职责的自相关程度
-
低耦合
- 模块&模块之间、类&类之间、函数&函数之间关系的亲密程度
-
高内聚
-
实际操作
-
单元测试
- 测试环境是否可独立
-
单元测试
-
衡量标准
-
误入歧途
- 与面向过程的设计方法相比,使用面向对象的方法设计出来的软件一定具有更高的质量
- 只要学好某门面向对象语言,就能精通面向对象的设计方法
-
对象&模式
-
面向对象
-
封装
- 聚合同一责任的相关信息
- 反映某一事物的共性
-
继承
-
正向理解
- 子承父业
-
反向理解[注1]
- 泛化(Generalization)
- 为了能统一处理各个具体的事物而抽象出来的此类事物具有的共同特征
-
正向理解
-
多态性[注2]
- 貌似调用抽象类的方法
- 实际执行具体类的真实处理过程
-
封装
-
设计原则
-
开闭原则(OCP)
- 一个模块对扩展应该是开放的,对修改应该是关闭的
-
完全替换原则(里氏代换原则LSP)
- 派生类应该能完全替换掉基类
-
依赖倒置原则(DIP)
- 依赖于抽象,而不依赖于具体
-
非循环依赖原则
- 包&包之间不能有循环依赖关系
- 只实现你真正需要的,不要去实现你认为需要的
-
不要重复自己
- 任何代码都只出现一次
- 保持简化的设计(KISS原则)
-
为人写代码,而不是为机器写代码
- 最好是写自注释的代码
-
开闭原则(OCP)
-
面向对象
-
生命周期
-
瀑布模型
- 需求分析
- 概要设计
- 详细分析
- 编码实现
- 单元测试
- 继承测试
- 运行维护
-
迭代模型
-
迭代周期1
- 分析
- 设计
- 编码
- 测试
-
迭代周期2
- 分析
- 设计
- 编码
- 测试
-
迭代周期N
- 分析
- 设计
- 编码
- 测试
-
迭代周期1
-
瀑布模型
-
参考资料
-
注1
- idior
- 注2
-
注1
-
设计方法
图示: