38

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

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

有人可以向我解释一下(如果可能的话,举个例子)?

4

1 回答 1

62

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

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

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

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

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

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

于 2012-07-04T15:34:29.683 回答