Java 计算机术语中的前置条件、后置条件和不变量有什么区别

Java 计算机术语中的前置条件、后置条件和不变量有什么区别,java,concurrency,uml,invariants,Java,Concurrency,Uml,Invariants,我正在读这本书,对这些术语感到有点困惑: 前提条件 后置条件 不变量 有人能给我解释一下吗(如果可能的话,请举个例子)?如果你不能理解这些简单的想法,你在编写Java时会遇到很多问题,尤其是多线程代码: 前置条件是在调用方法之前必须为真的东西。该方法告诉客户“这就是我对你的期望” 后置条件是在方法完成后必须为真的东西。这种方法告诉客户“这就是我承诺为你做的” 不变量是永远真实且不会改变的事物。该方法告诉客户“如果在你打电话给我之前这是真的,我保证在我打完电话后这仍然是真的” 它们都是“合同编程”

我正在读这本书,对这些术语感到有点困惑:

  • 前提条件
  • 后置条件
  • 不变量

  • 有人能给我解释一下吗(如果可能的话,请举个例子)?

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

  • 前置条件是在调用方法之前必须为真的东西。该方法告诉客户“这就是我对你的期望”
  • 后置条件是在方法完成后必须为真的东西。这种方法告诉客户“这就是我承诺为你做的”
  • 不变量是永远真实且不会改变的事物。该方法告诉客户“如果在你打电话给我之前这是真的,我保证在我打完电话后这仍然是真的”
  • 它们都是“合同编程”理念的一部分。它是由一个叫的人发明的。Bertrand Meyer构建了一种面向对象的语言,名为around it。没有人经常使用它,但他因此在阳光下度过了一天

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

    更新:2016年6月29日有11966392个问题。其中只有92人被贴上了“埃菲尔”的标签。埃菲尔问题的百分比大致保持在0.00077%左右


    我的观点是正确的-谢谢你,弗拉明彭昆。我已经更新了我的答案。

    为了帮助您发布更合适的问题,请提出一些具体的问题,这些问题可以显示您对该主题的研究/工作,为您的问题增加价值。你们可以发现在互联网上讨论的事情一般来说并不能成为好问题。附言:我自己也没有否决你。这有点苛刻……这个问题怎么会模棱两可呢?他希望通过一个代码示例来澄清这些术语的含义。他展示了研究,因为他正在读那本该死的书。有时候,我只是磨碎齿轮。Ugh.还假设当BDD中的单元测试和给定是实际使用前置条件的示例,而Assert&BDD Then子句是后置条件的示例。那么,当我编写带有特定前置条件的方法时,我是否会检查这些前置条件是否得到满足,还是我要假设客户足够聪明,不会违反先决条件?这是你的选择,但整个想法是为了验证和防止错误。问问自己,消费者是如何知道你的合同的。