`
shaomeng95
  • 浏览: 222137 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Design by Contract(契约式设计)

阅读更多
DBC  元素

先验条件:  针对方法(method),它规定了在调用该方法之前必须为真的条件。

后验条件: 也是针对方法,它规定了方法顺利执行完毕之后必须为真的条件。

不变式:  针对整个类,它规定了该类任何实例调用任何方法都必须为真的条件。


DBC 六大原则  

区分命令和查询 

将基本查询同派生查询区分开 

针对每个派生查询,设定一个后验条件,使用一个或多个基本查询的结果来定义它。 

对于每个命令都撰写一个后验条件,规定每个基本查询的值。 

对于每个查询和命令,采用一个合适的先验条件。 

撰写不变式来定义对象的恒定特性 


DBC 六大准则 

在适当的地方添加物理限制。 

先验条件中尽可能使用高效的查询。 

用不变式限定属性。 

为了支持特性的重定义,用相应的先验条件确保每个后验条件。 

将预期发生的变化和框定规则这两种不同的限制分别放置在不同的类中。 

有保密性要求,则违背保密性的查询可以在契约中使用,然后被设为私有属性。

 
Eiffel中的“契约” 

契约关系的双方是平等的,对整个bussiness的顺利进行负有共同责任,没有哪一方可以只享有权利而不承担义务。

契约关系经常是相互的,权利和义务之间往往是互相捆绑在一起的;

执行契约的义务在我,而核查契约的权力在人;

我的义务保障的是你的利益,而你的义务保障的是我的利益; 


我的看法

不管是不变式,还是先验后验条件,都是为了详细定义组件或对象的状态,这是为了防止程序员懒惰造成产品质量下降而强加的框架。

执行起来有难度的是,用户在使用组件的时候,即使知道契约,能否严格按照契约来做,开发期间是否能够将所有的违反契约的地方全部列出来,仍然是一个问题。

所以说是“Design by Contract”,因为详尽的测试还是必不可少的。

在OOA,OOD,OOP中,DBC只是提供了OOD的一种思想,是设计组件接口的一般性的原则


程序设计中的完备性

一个组件的接口构成一个完备的空间,基本查询就是其中的基矢量,派生查询可能很多,但都可以由基矢量的组合来表示。基矢量的所以组合构成这个组件的允许状态空间

命令能够改变组件的状态,使组件从状态空间中的一点迁移到另外一个点

简化接口的复杂性,重要的一点就是减少组件状态空间的大小,可以通过减少基矢量的数目或者减少某个基矢量的取值范围。


精确性和细节  设计阶段要求忽略细节,但也同样丢失了精确性,DbC要求保留模型语义的精确性,避免了设计者和编码人员之间或者使用者和提供者直接的理解误差  契约的应用层次也可以覆盖从设计到编码以至于测试。在设计阶段,了解DbC的人至少不会忽略对违反契约情况的处理,而对这一点缺乏足够的认识是很多产品不够健壮的主因。 

分享到:
评论

相关推荐

    契约式设计

    Design by Contract (DbC) 契约式设计 方法学层面的思想 Eiffel语言的直接支持 Bertrand Meyer:DbC是构建面向对象软件系统方法的核心! James McKim:“只要你会写程序,你就会写契约”

    Desing by Contract Utilities-开源

    综上所述,"Design by Contract Utilities"是实现DBC原则的一个实用工具集,它为开发者提供了一种规范化的、声明式的编程方式,以确保代码的质量和稳定性。通过使用这个开源库,开发者可以更自信地编写和维护代码,...

    基于Object-Z生成Python代码的研究.pdf

    3. 契约式设计(Design by Contract): - 契约式设计是一种软件验证方法,主要通过前置条件和后置条件保证模块间交互的正确性。 - 契约式设计要求代码中定义的契约(即规范)必须被遵守。 - 契约可以是前置条件...

    誓言:在长寿药中按合同设计

    标题中的“誓言:在长寿药中按合同设计”可能是指一个软件开发项目,其中采用了Elixir编程语言的Design by Contract原则。Design by Contract是一种软件工程方法,它将契约概念引入到编程中,确保代码的正确性和可靠...

    计算机编程常用术语英语词汇汇总.pdf

    58. Design by contract:契约式设计 59. Design pattern:设计模式 60. Destroy:销毁 61. Destructor (dtor):析构函数、析构器 62. Device:设备 63. DHTML (dynamic HyperText Markup):动态超文本标记语言 ...

    班触:学习计划好使用对象和合同Touch of Class: Learning to Program Well with Objects and Contracts

    面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件,而契约式设计(Design by Contract, DbC)是一种软件开发方法,它要求开发者明确每个部分(对象、方法)的“契约”,即输入输出的期望条件。...

    细分12级选择题选项整理by tjc1

    Oriented Requirements Analysis(面向对象需求分析)、Use Case(用例)、Actor(参与者)、Iteration(迭代)、Waterfall Process(瀑布模型)、FURPS+模型、Design(设计)、Requirements Analysis(需求分析)、...

    软件工程中英对照术语表归类.pdf

    契约式设计(Design by contract, DbC):一种软件设计范式,它将组件设计为具有明确定义的输入和输出契约。 事件驱动编程(Event-driven programming):一种编程范式,在此范式中程序的流程由事件(如用户操作)...

    31天重构速成

    通过在代码中引入契约式设计(Design By Contract),可以在方法的入口和出口处进行预置条件和后置条件检查,提高代码的健壮性和安全性。 #### 24. Remove Double Negative 消除代码中的双重否定,可以使逻辑表达...

    dbc:JavaScript和ReasonML的按合同设计编程

    契约式设计风格使您可以尽快在功能主体的开头和结尾处发现问题。 关于防御性编程的注意事项这听起来像是防御性编程-您知道,在做任何事情之前都要进行检查。 实际上不是,DBC仅用于执行_contracts,即仅在公共职能...

    C4JExplorer:Eclipse 的 C4J-Explorer 插件-开源

    C4J,即 Java 合同,是一个基于声明式断言的 Design by Contract (DbC) 框架。DbC 是一种软件设计方法论,源自 Bertrand Meyer 的 Eiffel 编程语言,它要求在类、方法和属性上定义前置条件、后置条件以及不变量,以...

    Java Modeling Language (JML)-开源

    Java Modeling Language(JML)是一种强大的行为接口规范语言,它为Java编程提供了详细的契约式设计能力。JML的出现旨在增强软件的可验证性和可靠性,通过在代码中明确指定模块的预期行为,开发者可以更有效地捕获和...

    31天代码重构速成 你必须知道的重构技巧

    Introduce Design By Contract Checks (引入契约式设计检查) - **定义**:在代码中加入预条件、后条件和不变量检查。 - **目的**:提高代码的质量和可靠性。 - **适用场景**:当需要确保代码的正确性时,应考虑...

Global site tag (gtag.js) - Google Analytics