Design by Contract

Design by Contract(DBC)大概可以译为“按契约设计”,是由Bertrand Meyer首先正式提出并在Eiffel语言中实现的编程方法学。DBC最大的特点就是:通过(内建的或附加的)语言特性强制程序的前条件(pre- condition)、后条件(post-condition)、不变式(invariant)得到保证,并从而使程序接口得到进一步的明确。

有两个敌对的学派,分别叫做Defensive Programming(创始人Barbara Liskov),和Design by Contract(创始人Bertrand Meyer)。

前者认为在每一个函数中需要加入尽可能多的条件检查,以确保这个函数是正常工作的。后者认为,需要为每一个函数精确指明调用者(Client 客户端)需要满足的条件,以及函数的实现本身([b]Contractor [/b]承包商)需要满足的条件,就可以了。

换言之,就是针对每一个方法规定一个初始条件,一个末态条件。初始条件是客户端需要满足的,末态条件是承包商需要满足的。这两个条件和在一起,就叫做合约。

就如同一个工程合约一样,工程的客户需要提供和约上的条件,比如资金,地皮,等等,承包商则按照约定施工,最后通过工程验收。如果客户没有提供合约上面制定的条件,就是客户违约,承包商无需进行施工。相反,如果客户提供了合适的条件,而承包商不能建造工程并通过验收的话,就是承包商违约,需要追究承包商的责任。
在这里,调用函数者就是客户端,它通过提供函数必需的参数调用此函数。如果客户端提供的参数是不合适的,函数不必进行运算,只需给出异常即可。

相反,如果客户确实提供了必要的参数,而函数的实现无法给出满足末态条件的结果,函数的实现就是有问题的,需要修改。

每一个函数的初始条件和末态条件加在一起,就是合约(Contract)。这种从合约出发进行设计的方法论,就叫做Design by Contract。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值