软件构造(4)- 设计规约

一.行为等价性

根据规约判断是否行为等价

  1. 单纯的看实现代码,并不足以判定不同的implmentation是否是“行为等价的”
  2. 需要根据代码的spec(开发者与client之间形成的contract)判定行为等价性
  3. 在编写代码之前,需要弄清楚spec如何协商形成、如何撰写

软件构造(4)- 设计规约
二.前置与后置条件

前置条件:对客户端的约束,在使用方法时必须满足的条件
后置条件:对开发者的约束,方法结束时必须满足的条件

除非在后置条件里声明过,否则方法内部不应该改变输入参数

避免使用可变的全局变量!可变数据类型导致程序修改变得异常困难

三.设计规约

规约S2替代S1的条件:规约的强度S2>=S1
前置条件更弱 后置条件更强 就可以用S2替代S1
spec变强:更放松的前置条件+更严格的后置条件

强弱的比较:

软件构造(4)- 设计规约 软件构造(4)- 设计规约
软件构造(4)- 设计规约更强的后置条件意味着实现的自由度更低了-》在图中的面积更小
更弱的前置条件意味着实现时要处理更多的可能输入,实现的自由度低了-》面积更小

是否使用前置条件取决于(1) check的代价;(2) 方法的使用范围

  1. 如果只在类的内部使用该方法(private),那么可以不使用前置条件,在使用该方法的各个位置进行check——责任交给内部client;
  2. 如果在其他地方使用该方法(public),那么必须要使用前置条件,若client端不满足则方法抛出异常。

来源:xyzhang2018

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

上一篇 2019年5月9日
下一篇 2019年5月9日

相关推荐