计算机术语中的前置条件,后置条件和不变量有何不同

时间:2012-07-04 15:30:06

标签: java concurrency uml invariants

我正在阅读这本书Java Concurrency in Practice并对这些术语感到困惑:

  1. 前提条件
  2. 发布条件
  3. 不变量
  4. 有人可以向我解释一下(例如,如果可能的话)?

1 个答案:

答案 0 :(得分:48)

如果您无法理解这些简单的想法,那么编写Java会遇到很多问题,特别是多线程代码:

  1. 前置条件是在调用方法之前必须为真的事情。该方法告诉客户“这是我对你的期望”。
  2. 后置条件是方法完成后必须为真的事情。该方法告诉客户“这是我保证会为你做的事情。”
  3. 不变量是永远正确且不会改变的事物。该方法告诉客户“在你打电话给我之前这是否属实,我保证当我完成时它仍然是真的”。
  4. 他们都是一个名为“按合同编程”的想法的一部分。它是由一个名叫C.A.R. Hoare的人发明的。 Bertrand Meyer围绕它构建了一个面向对象的语言Eiffel。没有人使用它,但是因为它,他在阳光下度过了一天。

    埃菲尔不是很受欢迎。在我写这篇文章时,有超过四百万个问题,但只有32个被标记为“埃菲尔”。

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

    我站得更正了 - 谢谢你,flamingpenguin。我已经更新了我的答案。