Posted on 2009-09-03 23:42
leekiang 阅读(627)
评论(1) 编辑 收藏 所属分类:
架构设计
契约式设计的本意很简单,就是在设计和编码阶段向面向对象程序中加入断言(assertion)。而所谓断言,实际就是必须为真的假设,只有这些假设为
真,程序才可能做到正确无误。契约式设计的主要断言包括先验条件(precondition)、后验条件(postcondition)以及不变式
(invariant):
● 先验条件针对方法(method)1,它规定了在调用该方法之前必须为真的条件。
● 后验条件也是针对方法,它规定了方法顺利执行完毕之后必须为真的条件。
● 不变式针对整个类,它规定了该类任何实例调用任何方法时都必须为真的条件。
断言应使用某种编程语言写在代码里(而不是仅仅通过文档加以声明),只有这样:
1)对于程序员而言,它们才有意义,同时能够提供优质的.有用的文档.
2)能够在运行时对它们进行检测,更好地支持测试和调试工作.
charon的建议。如果你对断言/防错程序不怎么熟悉,而且也搞不到那本"编程精粹"。买《Design by Contract by Example》这本书看看。如果已经熟悉了,到书店看个半小时到一小时就够了(例子只要挑个一个看,多了也没用),权当扩充知识面了。使用的话,就当断言了,设立若干前置条件后置条件就够了,这样足以有效提高对程序的置信度;什么不动点,Frame Rules,那是理论上的东西,吃力不讨好,有闲工夫的才时候可以用用(得到的效果和付出的努力不成比例)。
我的总结:开始看了名字以为是按约定进行设计的意思,后来大概看了看,了解了一点点,但决定不再在上面花时间了,测试驱动开发明显要更为成熟和实用。