MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

契约式设计Design by Contract

Posted on 2009-09-03 23:42 leekiang 阅读(432) 评论(1)  编辑  收藏 所属分类: 架构设计
契约式设计的本意很简单,就是在设计和编码阶段向面向对象程序中加入断言(assertion)。而所谓断言,实际就是必须为真的假设,只有这些假设为 真,程序才可能做到正确无误。契约式设计的主要断言包括先验条件(precondition)、后验条件(postcondition)以及不变式 (invariant):
● 先验条件针对方法(method)1,它规定了在调用该方法之前必须为真的条件。
● 后验条件也是针对方法,它规定了方法顺利执行完毕之后必须为真的条件。
● 不变式针对整个类,它规定了该类任何实例调用任何方法时都必须为真的条件。
断言应使用某种编程语言写在代码里(而不是仅仅通过文档加以声明),只有这样:
1)对于程序员而言,它们才有意义,同时能够提供优质的.有用的文档.
2)能够在运行时对它们进行检测,更好地支持测试和调试工作.

charon的建议。如果你对断言/防错程序不怎么熟悉,而且也搞不到那本"编程精粹"。买《Design by Contract by Example》这本书看看。如果已经熟悉了,到书店看个半小时到一小时就够了(例子只要挑个一个看,多了也没用),权当扩充知识面了。使用的话,就当断言了,设立若干前置条件后置条件就够了,这样足以有效提高对程序的置信度;什么不动点,Frame Rules,那是理论上的东西,吃力不讨好,有闲工夫的才时候可以用用(得到的效果和付出的努力不成比例)。

我的总结:开始看了名字以为是按约定进行设计的意思,后来大概看了看,了解了一点点,但决定不再在上面花时间了,测试驱动开发明显要更为成熟和实用。

评论

# re: 契约式设计Design by Contract[未登录]  回复  更多评论   

2009-09-16 10:33 by alex
谢谢你提供的各种网站链接信息。呵呵!

只有注册用户登录后才能发表评论。


网站导航: