计算机术语中的前置条件,后置条件和不变量有什么区别
我正在阅读Java Concurrency in Practice这本书,并对这些术语感到困惑:
- 预备条件
- 发布条件
- 不变
有人可以解释他们(举个例子,如果可能的话)?
如果您无法理解这些简单的想法,那么编写Java会遇到很多问题,特别是multithreading代码:
- 前置条件是在调用方法之前必须为真的事情。 该方法告诉客户“这是我对你的期望”。
- 后置条件是方法完成后必须为真的事情。 该方法告诉客户“这是我保证会为你做的”。
- 不变量是永远正确且不会改变的事物。 该方法告诉客户“在你打电话给我之前这是否属实,我保证当我完成时它仍然是真的”。
它们都是“合同编程”这一概念的一部分。 它是由一个名叫CAR Hoare的人发明的。 Bertrand Meyer围绕它构建了一个名为Eiffel的面向对象语言。 没有人使用它,但因为它,他在阳光下度过了一天。
埃菲尔不是很受欢迎。 在我写这篇文章时,有超过四百万个关于SO的问题,但只有32个被标记为“eiffel”。
更新:2016年6月29日,SO上有11,966,392个问题。 其中只有92个被标记为“埃菲尔”。 埃菲尔问题的百分比大致保持在~0.00077%。
我的立场得到了纠正 – 谢谢你,flamingpenguin。 我已经更新了我的答案。