设计规约
第五章设计规约
行为等价性:站在客户的角度,看两个函数是否可以互相替换。如果两个函数所能实现的效果相等,则具有行为等价性——根据规约查看行为等价性
前置条件:对客户端的约束,在使用方法时必须满足的条件
后置条件:对开发者的约束,方法结束时必须满足的条件
如果前置条件满足了,后置条件必须满足
前置条件不满足,则方法可做任何事情。
问题所在:
@requires @effects不可能存在,只有@param @throws @return
String boolean等描述数据类型的语句不要存在
第一行应该是/**
规约的强度判断法则
spec变强:更放松的前置条件+更严格的后置条件
举例如下:
越强的规约,意味着implementor的自由度和责任越重,而client的责任越轻。
在表示图中,某个具体实现,若满足规约,则落在其范围内;否则,在其之外。更强的规约,表达为更小的区域
客户端不喜欢太强的precondition,不满足precondition的输入会导致失败。惯用做法是: 不限定太强的precondition,而是在postcondition中抛出异常:输入不合法