1.程序设计语言中的函数和方法
程序是由一个个小的方法组成的,对于用户来说,并不需要知道方法具体如何实现,只需要知道,方法如何使用
以上就是一个方法的简单结构,而一个完整的方法,不仅要包含方法体还要有方法的规约
- 规约不应该讨论方法的局部变量或方法类的私有字段,这太过于具体且内部了,规约不关注实现
- 除非在后置条件有说明,规约中不应该改变输入
- 要在规约里限制住返回值的不可变,可变的对象更为复杂,且不可控
2.5 测试和验证规约
通过黑盒测试,不需要知道内部如何实现,只需要知道规约中如何规定输入输出。
3.设计规约
3.1 分类规约
一个好的规约要满足以下三点:
- 确定性
- 陈述性
- 强度:这个规范有一个小的合法实现集,还是一个大的实现集/li>
如果一个规约的强度更强意味着,它具有更弱的前置条件与更强的后置条件,因此可以用更强的规约替代弱的规约
3.2 图表化规约
这个空间中的每个点代表一个方法实现
规约在所有可能实现的空间中定义了一个区域
某个具体实现,若满足规约,则落在其范围内;否则,在其之外
更强的规约,表达为更小的区域
3.3 设计好的规约
好的规范应满足一些准则:
- 内聚的:Spec描述的功能应单一、简单、易理解。若一个规约描述了多种功能最好分为两个划分
- 信息丰富的:考虑多种的输入,与所有可能的输出
- 足够强的:规范需要满足客户的基本要求,开发者应尽可能考虑各种特殊情况,在post-condition给出处理措施
- 足够弱的:太强的要求给开发者带来实现的难度
- 需要使用抽象类型:给方法的实现体与客户端更大的自由度
- 权衡前置条件与后置条件:
只在类的内部使用该方法(private),那么可以使用前置条件,在使用该方法的各个位置进行check
如果在其他地方使用该方法(public),那么可以不使用/放松前置条件,若client端不满足则方法抛出异常
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!