38

Java Concurrency in Practiceという本を読んでいて、これらの用語と少し混乱しています。

  1. 前提条件
  2. 投稿条件
  3. 不変条件

誰かが私にそれらを説明してもらえますか(可能であれば例を挙げて)?

4

1 に答える 1

62

これらの単純なアイデアを理解できない場合、Java、特にマルチスレッドコードの記述で多くの問題が発生します。

  1. 前提条件は、メソッドが呼び出される前に真でなければならないものです。このメソッドは、クライアントに「これが私があなたに期待していることです」と伝えます。
  2. 事後条件は、メソッドが完了した後に真でなければならないものです。この方法は、クライアントに「これが私があなたのために行うことを約束することです」と伝えます。
  3. 不変条件は常に真実であり、変わらないものです。このメソッドは、クライアントに「あなたが私に電話する前にこれが真実だった場合、私が終わったときにそれがまだ真実であると約束します」と伝えます。

それらはすべて「契約によるプログラミング」と呼ばれるアイデアの一部です。それはCARHoareという名前の男によって発明されました。Bertrand Meyerは、その周りにEiffelと呼ばれるオブジェクト指向言語を構築しました。誰もそれをあまり使用しませんが、彼はそれのために太陽の下で一日を過ごしました。

エッフェルはあまり人気がありません。私がこれを書いている時点で、SOには400万を超える質問がありますが、「eiffel」とタグ付けされているのはそのうちの32だけです。

更新:2016年6月29日のSOに関する11,966,392の質問がありました。そのうち92個だけが「eiffel」とタグ付けされました。エッフェルの質問の割合は、ほぼ一定で約0.00077%にとどまっています。

私は正直に立っています-ありがとう、flamingpenguin。回答を更新しました。

于 2012-07-04T15:34:29.683 に答える