第四章:面向可理解的软件构造
四种注释类型:
方法前,使用/**……*/标明@params
在各种成员变量后,在构造函数前使用//
在测试类的顶部记录/*……*/
在相应的测试函数记录,覆盖测试部分//
第五章:面向复用的软件构造方法
复用:开发出可复用的软件
利:降低重复开发成本,经过充分测试可靠,标准化
弊:性能差,针对普适场景没有针对性
(measure)复用性(reusability)
高复用性软件的特点:
- 小,简单
- 与标准兼容
- 灵活可变
- 可拓展
- 泛型,参数化
- 模块化
- 变化的局部性
- 稳定
- 丰富的文档
Liskov替换原则(LSP):
- 子类型可以无条件替换父类型
- 子类型需要实现抽象类型种的所有未实现方法
- 子类型中重写的方法必须有相同或子类型的返回值
- 子类型中重写的方法必须使用同样类型的参数
- 子类型中重写的方法不能抛出额外的异常
delegation和继承的区别
15. delegeation对子类只需要父亲一小部分代码(委派实现)
16. 委派发生在Object level,而继承发生在class level
第六章:面向可维护性的软件构造方法
软件维护:修复错误、改善性能
25%纠错性 21%适应性 50%完善性 4%预防性
可维护性的衡量指标
- 圈复杂度(cyclomatic Complexity,cc)
- 代码行数(Lines of Code ,Loc)
- Halstead Volume(根据操作符个数生成综合指标)
- 可维护性指数(Maintainability Index,MI)
涉及到123和COM(comments of module) - 继承的层次数
- 类之间的耦合度
- 单元测试覆盖率
模块化编程 :高内聚,低耦合,分离关注点,信息隐藏
5大标准:可分解性,可组合性,可理解性,可持续性,出现异常之后的保护
耦合度:衡量模块间的依赖性,耦合度的高低取决于 ① 模块间的接口数量②每个接口的复杂度(由类之间交流决定)
聚合度:衡量模块内部函数的相关程度,高聚合度意味着模块内的元素朝同一个目标努力