软件构造(规约的强弱)

目录

一、什么是规约(spec)

二、规约的强弱

1.以下面的代码为例

2.Note


一、什么是规约(spec)

规约是写在方法前面的注释,用来解释方法的功能、参数、返回值等

为什么要为每个方法写规约?

1.精确的规约,有助于区分责任

2.客户端无需阅读调用函数的代码,只需理解spec即可

3.规约可以隔离“变化”,无需通知客户端

规约的结构:

1.对方法的解释

2.前置条件:对客户端的约束,在使用方法时必须满足的条件

3.后置条件:对开发者的约束,方法结束时必须满足的条件

二、规约的强弱

定义:规格说明S2强于(等于)规格说明S1,如果:

  • S2的前置条件弱于或等价于S1的
  • S2的后置条件强于或等于S1的后置条件。

即:spec变强意味着 更放松的前置条件+更严格的后置条件

1.以下面的代码为例

版本1中,对find方法的规约中,前置条件中规定val在数组a中出现有且仅有一次

再看版本2

此时前置条件规定val应该出现至少一次,因此前置条件变弱了,所以spec更强了

再看版本3

和版本2比,在满足前置条件的情况下,后置条件变强了,所以spec更强了

2.Note

需要注意的是,两个spec S1和S2比较时,一定要在满足前置条件的情况下比较后置条件的强弱

看下面这个例子

单看后置条件,S2的后置条件比S1更强,但是在满足S1的前置条件,即满足val在数组a中至少出现一次的条件时,其实S2的后置条件与S1相比并没有变化。前置条件更弱,后置条件不变,因此S2比S1更弱了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值