第五章 设计规约
一、函数、方法
1.方法是程序的积木,可以被独立开发、测试、复用
使用方法的客户端,无需了解方法内部具体如何工作
2.一个完整的方法:规约+实现
二、规约
- 注释形式的设计决策 给自己读 给别人读
- 规约:扮演防火墙角色
客户端不需要知道如何实现
实现者不需要如何被使用
3.行为等价性:站在客户端视角看行为等价性
根据规约判断是否行为等价
4.前置条件 后置条件
前置条件:对客户端的约束,在使用方法时必须满足的条件
后置条件:对开发者的约束,方法结束时必须满足的条件
前置条件满足,后置条件必须满足。前置条件不满足,则方法可以做任何事情。
当前置条件被违反时,说明客户端有bug,可以通过快速失败使bug更容易被找到和修复。
5.
/**
param/return 不能写出类型
不说实现细节
6.除非在后置条件里声明,否则方法内部不能改变输入参数
三、设计规约
- 规约的确定性、陈述性、强度
- 比较规约的强度
规约的强度S2>=S1:
S2的前置条件比S1的前置条件弱,S2的后置条件强于S1的后置条件。更少的要求,更多的承诺。
越强的规约,意味着实现者自由度更少,客户端责任更轻。
3.设计好的规约
(1)内聚的:Spec描述的功能应单一、简单、易理解(ready for change)
(2)信息丰富的
(3)足够强
(4)不能太强以至于做不到
(5)在规约里使用抽象类型,可以给方法的实现体与客户端更大的自由度
(6)是否检查前置条件已满足?
看方法范围已经check的代价