web-dev-qa-db-ja.com

コンピュータ用語の事前条件、事後条件、不変条件の違いは何ですか

私は本を​​読んでいます Javaの並行性の実践 とこれらの用語と少し混同されます:

  1. 前提条件
  2. 事後条件
  3. 不変式

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

26
Inquisitive

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

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

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

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

更新:SO 2016年6月29日に11,966,392の質問がありました。そのうち92のみが「eiffel」とタグ付けされました。

私は訂正します-ありがとう、フラミンペンギン。回答を更新しました。

50
duffymo