软件构造(五) 设计规约

1.程序设计语言中的函数和方法

程序是由一个个小的方法组成的,对于用户来说,并不需要知道方法具体如何实现,只需要知道,方法如何使用

以上就是一个方法的简单结构,而一个完整的方法,不仅要包含方法体还要有方法的规约

软件构造(五) 设计规约
注意:
  • 规约不应该讨论方法的局部变量或方法类的私有字段,这太过于具体且内部了,规约不关注实现
  • 除非在后置条件有说明,规约中不应该改变输入
  • 要在规约里限制住返回值的不可变,可变的对象更为复杂,且不可控

2.5 测试和验证规约

通过黑盒测试,不需要知道内部如何实现,只需要知道规约中如何规定输入输出。

3.设计规约

3.1 分类规约

一个好的规约要满足以下三点:

  • 确定性
  • 陈述性
  • 强度:这个规范有一个小的合法实现集,还是一个大的实现集/li>

如果一个规约的强度更强意味着,它具有更弱的前置条件与更强的后置条件,因此可以用更强的规约替代弱的规约

3.2 图表化规约

这个空间中的每个点代表一个方法实现
规约在所有可能实现的空间中定义了一个区域
某个具体实现,若满足规约,则落在其范围内;否则,在其之外
更强的规约,表达为更小的区域

软件构造(五) 设计规约

3.3 设计好的规约

好的规范应满足一些准则:

  • 内聚的:Spec描述的功能应单一、简单、易理解。若一个规约描述了多种功能最好分为两个划分
  • 信息丰富的:考虑多种的输入,与所有可能的输出
  • 足够强的:规范需要满足客户的基本要求,开发者应尽可能考虑各种特殊情况,在post-condition给出处理措施
  • 足够弱的:太强的要求给开发者带来实现的难度
  • 需要使用抽象类型:给方法的实现体与客户端更大的自由度
  • 权衡前置条件与后置条件:
    只在类的内部使用该方法(private),那么可以使用前置条件,在使用该方法的各个位置进行check
    如果在其他地方使用该方法(public),那么可以不使用/放松前置条件,若client端不满足则方法抛出异常

来源:MaskedK

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月2日
下一篇 2021年6月2日

相关推荐