SPEC
Object
-
属性/数据
-
- 可变的
- 不可变的
-
方法
-
- Spec
- 实现
Spec:
-
定义: 双方的“合同”/”防火墙“(外部不可见)
-
基本结构:
-
- 前置条件(对参数的约束,对客户端的约束)
- 后置条件(对返回值的约束,对开发者的约束)
-
原则:
前置满足---->后置必须满足 前置满足—>?(fail fine)
Spec是给客户端看的,不要把程序内部暴露出来
-
强度:
stronger(对客户端更加友好/易使用,对开发者要求更高/难设计/实现方式更少):
前置条件更弱 , 后置条件更强(在前置条件一样的情况下)
【注:看PPT的几个例子】
下面情况不可比较强度:
前置变弱 且 前置相同时,后置变弱
当不可比较的时候,两个spec无法替代另一个
当可以比较的时候,可以用stronger的条件代替weaker的条件
Spec 的强度:
A>b:
可以用A取代b
-
preA <= preb 更弱的前置条件 postA>=postb (以b的pre为准) 更强的后置条件 -
更强的spec 实现自由度小,难于开发 易于使用 -
ven图:更大的圈代表更大的实现自由度,spec强度更低
可以让后置条件减弱:Throw error
参数检查的代价:
代价高: 不实现,写在pre-condition中
代价低:检查,直接在post中抛出异常