规约(Specifications)
规约注释包含:功能描述、输入数据限制、返回值
行为等价性(Behavioral equivalence)
一般站在用户(客户端)的角度看,可根据规约判断是否行为等价
前置条件和后置条件
前置条件,关键词requires
是使用方法必须满足的条件,约束客户端
后置条件,关键词effects
是方法结束时必须满足的条件,约束开发者
如果前置条件满足,后置条件必须满足;如果前置条件不满足,方法可以做任何事
Java中的静态类型声明是一种规约,可据此进行静态类型检查static checking
方法前的注释也是一种规约,但需要人工判定其是否满足
前置条件在 @param
中,后置条件在 @return
和@throws
中(@return
中不能包含具体类型,如 @return boolean)
规约强弱:
条件更弱,后置条件更强,spec更强。
Diagramming specifications
每一个点代表一个方法的实现。如果某个具体实现满足规约,就落在其范围内;否则在其之外。
更强的规约,表示为更小的区域。(实现的自由度小,面积小)
规约强弱判断实例