Design by Contract(DBC)大概可以译为“按契约设计”,是由Bertrand Meyer首先正式提出并在Eiffel语言中实现的编程方法学。DBC最大的特点就是:通过(内建的或附加的)语言特性强制程序的前条件(pre- condition)、后条件(post-condition)、不变式(invariant)得到保证,并从而使程序接口得到进一步的明确。
有两个敌对的学派,分别叫做Defensive Programming(创始人Barbara Liskov),和Design by Contract(创始人Bertrand Meyer)。
前者认为在每一个函数中需要加入尽可能多的条件检查,以确保这个函数是正常工作的。后者认为,需要为每一个函数精确指明调用者(Client 客户端)需要满足的条件,以及函数的实现本身(
Contractor 承包商)需要满足的条件,就可以了。
换言之,就是针对每一个方法规定一个初始条件,一个末态条件。初始条件是客户端需要满足的,末态条件是承包商需要满足的。这两个条件和在一起,就叫做合约。
就如同一个工程合约一样,工程的客户需要提供和约上的条件,比如资金,地皮,等等,承包商则按照约定施工,最后通过工程验收。如果客户没有提供合约上面制定的条件,就是客户违约,承包商无需进行施工。相反,如果客户提供了合适的条件,而承包商不能建造工程并通过验收的话,就是承包商违约,需要追究承包商的责任。
在这里,调用函数者就是客户端,它通过提供函数必需的参数调用此函数。如果客户端提供的参数是不合适的,函数不必进行运算,只需给出异常即可。
相反,如果客户确实提供了必要的参数,而函数的实现无法给出满足末态条件的结果,函数的实现就是有问题的,需要修改。
每一个函数的初始条件和末态条件加在一起,就是合约(Contract)。这种从合约出发进行设计的方法论,就叫做Design by Contract。
分享到:
相关推荐
[Design by Contract,by Example Refactoring Design Patterns Explained Design by ntract,by Example Design Patterns Explained].zip C++初学者50个忠告中提及的资料整理[分10卷下载每卷50M].part09.rar
Common Lisp的合同编程库,采用Eiffel的Design by Contract:trade_mark:样式。 这是什么一回事呢? 每个程序的一个主要目标是可靠性,即正确性和鲁棒性。 如果程序按照其规范执行,则该程序是正确的;如果以一种...
Fluent design by contract assertions for Android Installation Add the JitPack repository to your root build.gradle: allprojects { repositories { ... maven { url "https://jitpack.io" } } } In ...
基础Contract类允许新的或现有的类将属性定义为受保护的属性,并将方法定义为Routines,这些例程需要参数类型/类验证以及PreCondition和PostCondition检查。 实例还可以使用不变检查来检查状态一致性。
《Barter:超越设计合同的开源工具》 Barter是一个专为提升Java应用程序质量而设计的开源工具。它引入了一种新的编程理念,使程序员能够按照“设计合同”的概念来编写代码,以此确保代码的健壮性和可维护性。...
The first two rules ... Some benefits of other coding styles that have been advanced for safety critical systems, e.g., the discipline of “design by contract” can partly be found in rules 5 to 7.
在这个特定的压缩包中,结合了Java编程和DBC(Design by Contract)概念,同时提到了一个“魂斗罗”游戏的小程序开发。"魂斗罗java代码"和"魂斗罗代码java"标签表明,这个项目可能包含了用Java语言重制的经典游戏...
Design by contract: how to build software that works the first time around.• A study of fundamental design patterns.• How to find the classes and many others topics of object-oriented ...
Design by contract: how to build software that works the first time around.• A study of fundamental design patterns.• How to find the classes and many others topics of object-oriented ...
5. **Design by Contract**:这是一种编程范式,提倡在代码中明确指定先决条件、后置条件和不变量,以增强代码的正确性和可读性。在C++中,可以使用assert和其他预处理宏来实现设计合同。 6. **Template ...
《Design by Contract Utilities:开源实现与应用》 在软件开发领域,"Design by Contract"(DBC)是一种编程范式,它引入了契约的概念,增强了代码的健壮性和可维护性。该理念源于Eiffel语言的创始人Bertrand ...
其次,从编程层面看,abstract class和interface都可以用来实现"design by contract"的思想。但是在具体的使用上面还是有一些区别的。abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系...
其特征包括自动生成JUNIT测试用例,检查Design by Contract规范,支持多种编码标准,以及与IBM Websphere Studio/Eclipse IDE的集成。然而,JTEST的价格相对较高,可能不适合所有预算有限的团队。 其次,JMETER是...
它可能包含了一系列的合约接口和辅助类,帮助编写更具可读性和维护性的测试代码,特别是在进行面向协定的编程时,例如使用Design by Contract原则。 在实际使用中,FlexJSON库可以帮助开发者将Java对象转换成JSON...
58. Design by contract:契约式设计 59. Design pattern:设计模式 60. Destroy:销毁 61. Destructor (dtor):析构函数、析构器 62. Device:设备 63. DHTML (dynamic HyperText Markup):动态超文本标记语言 ...
2. **DbC(Design by Contract)规范检查**:对于遵循DbC原则的代码,JTEST能验证其正确性,确保代码逻辑的完整性。 3. **编码规范检查与自动纠正**:JTEST内置了超过350个编码标准,可以自动检测和修正大部分常见...
文档列举了一系列的商标声明,如Java、J2EE、JEE、J2SE、Sun、Sun Microsystems、HTML、XML、XSL、UNIX、Linux、Windows、Microsoft、Win32、Eiffel、Design by Contract、OMG、UML等。这些商标声明反映了IT行业中...
例如,Jcontract是为Java语言设计的DbC(Design by Contract)注解工具,它通过强制实施设计契约来确保系统级的行为正确。BoundsChecker是针对Visual C++开发者的运行时错误检测和调试工具,它能实时监测应用程序中...