【问题标题】:What are the differences pre condition ,post condition and invariant in computer terminology [closed]计算机术语中的前置条件,后置条件和不变量有什么区别[关闭]
【发布时间】:2012-07-04 15:30:06
【问题描述】:

我正在阅读Java Concurrency in Practice 的书,对这些术语有些困惑:

  1. 前置条件
  2. 后置条件
  3. 不变量

谁能给我解释一下(如果可能的话,举个例子)?

【问题讨论】:

  • 希望帮助您在 SO 上发布更合适的问题,请提出具体问题,展示您自己对该主题的研究/工作,为您的问题增加价值。您可以在互联网上找到的一般讨论的事情本身并不能成为关于 SO 的好问题。 PS:我自己还没有投票给你。
  • 这有点苛刻...
  • 这个问题怎么模棱两可?他想通过代码示例来澄清这些术语的含义。他展示了研究,因为他正在阅读这本该死的书。有时SO只是磨我的齿轮。呃。
  • Also Assume when Unit Test 和 Given in BDD 是现实世界使用前置条件的例子,而 Assert 和 BDD Then 子句是后置条件的例子。

标签: java concurrency uml invariants


【解决方案1】:

如果你不能理解这些简单的想法,你会在编写 Java 时遇到很多问题,尤其是多线程代码:

  1. 前置条件是在调用方法之前必须为真的事情。该方法告诉客户“这是我对你的期望”。
  2. 后置条件是方法完成后必须为真的事情。该方法告诉客户“这是我承诺为您做的事情”。
  3. 不变量是始终正确且不会改变的事物。该方法告诉客户“如果在你打电话给我之前这是真的,我保证在我完成后它仍然是真的”。

它们都是“契约式编程”理念的一部分。它是由一个叫C.A.R. Hoare 的人发明的。 Bertrand Meyer 围绕它构建了一种名为Eiffel 的面向对象语言。没有人经常使用它,但他因此在阳光下度过了一天。

埃菲尔不是很受欢迎。在我写这篇文章时,关于 SO 的问题有超过 400 万个,但其中只有 32 个被标记为“埃菲尔”。

更新:2016 年 6 月 29 日有 11,966,392 个关于 SO 的问题。其中只有 92 个被标记为“埃菲尔”。埃菲尔问题的百分比大致保持在 ~0.00077%。

我的立场是正确的 - 谢谢你,flamingpenguin。我已经更新了我的答案。

【讨论】:

  • 所以,当我在编写具有某些先决条件的方法时,我会检查这些先决条件是否满足,还是假设客户端足够聪明而不会违反前置条件?
  • 您的选择,但整个想法是验证和防止错误。问问自己消费者如何知道你的合同。
  • 我通过阅读stackoverflow.com/q/77127/845117 了解“何时抛出异常”来到这里。对我来说,前置条件、后置条件和不变量这 3 个术语听起来确实很合乎逻辑。如果“我的”执行函数不能满足其中任何一个,我会抛出异常。对我来说,异常是一个标记,告诉我执行没有按预期/声明终止 - 小心!
猜你喜欢
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 2010-10-31
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
相关资源
最近更新 更多