规约的组成
前置条件(precondition):输入满足的条件,在注释中记作requires。
后置条件(postcondition):输出满足的条件,在注释中记作effects。
例外行为(exceptional behavior):当前置条件不满足时会发生的事件。
规约的意义
规约描述了方法的行为,即当前置条件被满足时,在方法完成后,后置条件一定被满足;当前置条件不被满足时,后置条件可以不被满足,或称方法的行为是任意的。
在Java中,可以在方法注释中通过@param
、@return
、@throws
等条目书写规约。
规约的比较
称规约S2比规约S1等价或更强当且仅当以下条件同时成立
- S2的前置条件相等或弱于S1的前置条件。
- S2的后置条件相等或强于S1的后置条件。
满足强规约的实现一定满足弱规约。进而,一个满足弱规约的方法一定可以安全地被替换为满足强规约的方法。
注意规约间可能无法比较强弱。