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

一.行为等价性

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

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

在这里插入图片描述例如上述两方法如果只看代码显然不等价,但在下述spec中这两个方法等价
在这里插入图片描述

二.前置与后置条件

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

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

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

三.设计规约

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

强弱的比较:
在这里插入图片描述
越强的规约,意味着implementor的自由度和责任越重,而client的责任越轻。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述更强的后置条件意味着实现的自由度更低了-》在图中的面积更小
更弱的前置条件意味着实现时要处理更多的可能输入,实现的自由度低了-》面积更小

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值