【软构】规约


前言

规约是软件构造中一种常用的手段,它规定了每个方法的作用,是在编程之前对各部分模块的总体设计。一个软件在设计阶段就应该完成规约的设计,并且根据规约设计出测试程序,这会大大减少软件的生产周期。


一、规约及其作用

一个软件的代码本身就蕴含了设计者的设计决策,但是这是远远不够的,一是不够直观,难以从代码中提取设计决策信息;二是设计者本身也记不住。

于是就需要规约来作为软件的“法律”,有了规约之后,在编写程序时就有据可依,知道应该实现什么样的功能,可以实时检查代码写的符不符合功能需求。

规约约定了责任范围,写代码的人要负责的责任都写在规约中,清晰且容易定位错误,方便管理,这就能够一定程度避免因对功能的误解而造成的bug。

除此之外,在客户端client使用某个方法时,不需要去费劲地读代码理解代码细节,只需要理解规约就可以了。这还意味着规约扮演着隔离者的角色,方法中具体实现过程的变化无需通知客户端或其他调用者,可以提高代码迭代的效率。

二、规约的内容及标准

2.1规约的内容

  1. 输入/输出的数据类型。
  2. 功能和正确性期望
  3. 性能要求

2.2规约的结构

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

如果前置条件满足了,那么后置条件一定要满足;如果前置条件都不满足,那么后置条件也不需要满足,方法可以做任何事。这里其实蕴含了一个思想,那就是如果前置条件没有被满足,那么说明客户端出现了bug,虽然开发者没有责任去提醒客户端存在bug,但是也可以编写代码使前置条件不满足时能够帮助客户端更快地找到bug。

关于参数,如果后置条件没有声明可以更改输入参数,就不能将其改变,一般轻易不会改变输入参数。

三、规约的比较

规约是人写的,自然有好坏之分,如何判断哪个规约更好呢?一般通过判定规约的确定性、陈述性、强度来判断。

重点来看规约的强度。如何比较两个规约,以判断是否可以用一个规约替换另一个?标准就是:如果S1相比于S2,前置条件更弱、后置条件更强,那么就可以说规约S1强于S2,就可以用S1替换S2。这样写出来的程序如果能满足S1,就一定能满足S2。

所谓条件的强弱实际上就是指条件所规定的范围的小大。

把规约的强弱用图来表示。具体实现以点来表示,若满足规约,则点落在规约范围内;否则,在其之外。更强的规约,表达为更小的区域。如图所示。也可以这样理解,强的规约实现的功能是弱规约实现的功能的一部分。
在这里插入图片描述

四、规约的设计

一个好的“方法”设计,并不是代码写的多么好,而是对该方法的spec设计得如何。一方面:用户client用着舒服;另一方面:开发者编着舒服。应尽量遵循以下原则。

  1. 规约描述的功能应单一、简单、易理解。
  2. 规约不应太强或太弱,太强开发者太难写,太弱客户端不敢用。
  3. 在规约中使用抽象类型而不是具体类型,可以给方法的实现体与客户端更大的自由度

总结

本章介绍了规约,包括规约的内容、标准、强弱比较以及设计原则。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值