6.3 契约式设计

Posted mayzhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.3 契约式设计相关的知识,希望对你有一定的参考价值。

3、契约式设计 Design by Contract

  ? 可信软件设计的基础思想

   ? 谚语: When ideas fail, words come in very handy !

    他人译文“殚思竭虑之时,文字将成为利器” 本人认为“当想法失败时,总会出来许多理由辩解”
3.1 问题的引入 由谁负责系统的可靠性?
3.2 Contract (契约) History

  ? Tony Hoare,把“操作契约 Operation contract”引入了计算机科学的 “形式化规范说明formal specification”研究

    ? In the mid-1960s to develop an ALGOL 60 compiler

    ? Read Bertrand Russell‘s ( 伯特兰·罗素)

    Introduction to Mathematical Philosophy, which introduced him to the idea of axiomatic theory(公理)and assertions(断言) 。

      ? Assertions: (pre- and post-conditions)

  ? Peter Lucas, in 1974, VDM(Vienna Definition Method), for PL/1 compiler, at IBM Lab

    ? VDM, A method applied operation contract formal specifications and rigorous proof theory
  ? In the 1980s, Bertrand Meyer, compiler writer

    ? the OO language: Eiffel

    ? started to promote the use of pre- and post-condition assertions as first-class elements within his Eiffel language

    ? 契约式设计 Design by Contract (DBC)

      ? 细粒度软件类的操作需要强调“契约”,而不是针对整个系统的操作(大粒度软件类)

      ? 推动了“不变量 invariant”的概念

        ? 在操作执行前、执行后都不变的概念

  ? 1990s, Grady Booch

    ? 把“契约 contracts”引入对象操作

    ? 详细的用例描述中,重要的操作

      ? Pre- / Post- condition
3.3 契约式设计DBC (Design By Contract)

  ? 名词解释

    ? 客户端、客户 Client:需要另一方提供服务

    ? 服务端、服务器 Server:为其它方提供服务

  ? 一份契约承载了相互间(client/server) 的义务与利益

    ? 客户端只有在能够满足服务端的“前置条件”的情况下,才能调用服务端 的服务

      The client should only call a routine(server) when the routine’s pre-condition is respected

    ? 服务端在结束服务后,必须保证满足其后置条件

      The routine ensures that after completion its post-condition is respected

  ? 比喻

    ? 顾客到商店买食品。必须是真钱,不是假币。食品必须卫生、安全、符合 质量要求
  ? 断言 assertion

    ? 在类的代码中,加入一些断言,则定义了契约

      Each class defines a contract, by placing assertions inside the code
    ? 断言仅仅是一些逻辑表达式 Assertions are just Boolean expressions

    ? 断言不影响程序的执行 Assertions have no effect on execution

    ? 断言可以被评估,或者忽略 Assertions can be checked or ignored
  ? 每个功能定义了一个前置条件、一个后置条件 Each feature is equipped with a precondition and a postcondition
3.4 Software Correctness

  假定有一个人拿着一个程序到你面前问: “ 这个程序正确吗?Is this program correct ”

  这个问题有意义的前提是: 程序应该完成什么功能有一个精确的描述

  This question is meaningful only if there is a precise description of what the program is supposed to do
  这样的一个描述,就是规格说明 specification, 规格说明必须精确,否则不可 能推理出是否正确
3.5 规格说明Specification的形式化表示

小结 契约式设计

  ? 软件可靠性需要服务的提供方与客户方都有精确的规格说明

    Software reliability requires precise specifications which are honoured by both the supplier and the client

  ? 契约式设计DbC使用断言(前置条件、后置条件、不变量等)作为 供/需双方之间的契约

    uses assertions (pre and postconditions, invariants) as a contract between supplier and client 

以上是关于6.3 契约式设计的主要内容,如果未能解决你的问题,请参考以下文章

小酌重构系列[16]——引入契约式设计

编程思想和原则之——《Design by Contract (DbC) – 契约式设计》附参考代码

从零开始写一个契约测试工具——数据库设计

腾讯TMQ浅谈Chromium中的设计模式——pre/post和Delegate模式

OO第三单元总结-规格化设计

股权架构设计:契约型股权架构