一、Specification:规范化编程
在编程过程中,文档与规约是十分重要的。因为除了编译器,其他人也需要阅读你所编写的程序。spec就起到了这个协助沟通交流的作用。
Spec,是一种程序与客户端之间达成的契约,给供需双方都确定了责任,双方都要遵守。spec讲述了方法输入和输出的数据类型,方法的功能和正确性。它只讲了“做什么”,但是无需讲述"怎样实现"。
- 行为等价性
描述两个方法是否可以相互替换。两个方法的内部行为可能不同,但是对于客户端来说,可能作用是相同的。一般来说,两个方法的规约相同,那么他们就是等价的。
precondition(前置条件):对客户端的约束,在使用方法时必须满足的条件
postcondition(后置条件):对开发者的约束,方法结束时必须满足的条件
一个契约是,如果前置条件满足,那么后置条件必须满足。如果前置条件不满足,那么后置可以进行任何操作。
二、设计Spec
如何比较两个规约,以判断是否可以用一个规约替代另外一个?
当前置条件更弱,后置条件更强时,整个规约的强度就更强,就可以用于替代之前的。也就是说对客户端的要求更少了,但是方法仍然可以返回正确的值。
在设计时最常用的方法是抛出异常,这样能够满足client对前置条件的需求,实现方面也更方便check。