目录
一、什么是规约(spec)
规约是写在方法前面的注释,用来解释方法的功能、参数、返回值等
为什么要为每个方法写规约?
1.精确的规约,有助于区分责任
2.客户端无需阅读调用函数的代码,只需理解spec即可
3.规约可以隔离“变化”,无需通知客户端
规约的结构:
1.对方法的解释
2.前置条件:对客户端的约束,在使用方法时必须满足的条件
3.后置条件:对开发者的约束,方法结束时必须满足的条件
二、规约的强弱
定义:规格说明S2强于(等于)规格说明S1,如果:
- S2的前置条件弱于或等价于S1的
- S2的后置条件强于或等于S1的后置条件。
即:spec变强意味着 更放松的前置条件+更严格的后置条件
1.以下面的代码为例
版本1中,对find方法的规约中,前置条件中规定val在数组a中出现有且仅有一次
再看版本2
此时前置条件规定val应该出现至少一次,因此前置条件变弱了,所以spec更强了
再看版本3
和版本2比,在满足前置条件的情况下,后置条件变强了,所以spec更强了
2.Note
需要注意的是,两个spec S1和S2比较时,一定要在满足前置条件的情况下比较后置条件的强弱
看下面这个例子
单看后置条件,S2的后置条件比S1更强,但是在满足S1的前置条件,即满足val在数组a中至少出现一次的条件时,其实S2的后置条件与S1相比并没有变化。前置条件更弱,后置条件不变,因此S2比S1更弱了。