目录
1.SPEC的必要性
初学java,从简单的几个类到现在做实验或者项目的几十个类,几十个方法,越发理解到一个
好的SPEC的重要性:解耦合。太多的调用关系,太多的继承委托,如果没有一个规约,后期维护
花费的时间和精力真的让人头大。
2.SPEC的内容
2.1方法的目的,作用
尽可能明白地叙述方法是干什么的,客户端可以明白怎么使用,程序员自己修改起来也
不至于得重新理解
2.2方法的Precondition
@param:对客户端的约束,在使用方法时必须满足的条件(传入的数据类型和域等)
2.3方法的Postcondition
@return:对开发者的约束,在方法返回时必须满足的条件
2.4抛出的异常等
@throws:这个方法中可能抛出的异常(checked and unchecked)
3.如何比较SPEC的强弱
前置条件变弱,后置条件不变,SPEC变强;前置条件不变,后置条件变强,SPEC变强;
前置条件变弱,后置条件变强,SPEC变强;前置条件变强,后置条件也变强则无法比较。
总而言之,对客户端输入数据的要求越低,对开发者的要求越高,SPEC越强。
4.一些注意的事项
(1)如果客户端满足了前置条件,那么开发者必须满足后置条件;如果没有满足前置条件,
开发者可以做任何事
(2)拥有相同规约的函数具有行为等价性,可以相互替换。方法的功能相同,拥有更强规约
的方法可以替换规约较弱的方法而不会产生功能上的影响
5.写SPEC应遵守的一些规则
(1)SPEC描述的功能应该单一、简单、易理解。
(2)SPEC应该是信息丰富的,不要让客户端产生理解的歧义
(3)SPEC的强度应该适中,SPEC太强对开发者的要求太高(对于客户端来说是好事),
SPEC太弱又对客户端要求太高,(显示不出开发者的水平哈哈)
(4)在规约里使用抽象类型,可 以给方法的实现体与客户端更大的自由度。