質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

4288閲覧

契約プログラミングについて事後条件と不変条件がよくわかりません。

Matthew.py

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

3クリップ

投稿2020/02/23 16:12

契約プログラミングについてですが、事前条件についてはわかりましたが、残りの二つについてあまり理解ができません。
例えば以下の簡単なFunctionにて事前条件の違反となれば、二つの引数を想定しているのに対して一つだけやまたはタイプの違うstringを渡してもErrorで帰ってきます。これを事前条件の違反というのはsimpleで分かりやすいですが、事後条件と不変条件はwikipediaで見ても難しい言葉で説明してあってあんまりイメージがわきません。
大変初歩的な質問ではあると思いますが残り二つの違反とはどういうものなのか書きの簡単なFunctionを例に説明していただければと思います。

事後条件 (postcondition)

サブルーチンが、終了時に保証すべき性質。
不変条件 (invariant)
クラスなどのオブジェクトがその外部に公開しているすべての操作の開始時と終了時に保証されるべき、オブジェクト毎に共通した性質。
コードを呼ぶ側が事前条件と不変条件を満たす義務を負うことで、呼ばれたコードはその条件が恒真であるとの前提を利益として得る。引き換えに、呼ばれたコードは事後条件と不変条件を義務として負い、呼ぶ側の利益としてこれを保証する。...wikipediaより

Python

1def add_cal(a,b): 2 sum = a + b 3 print(sum) 4 5add_cal(3)
yudedako67👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

【事後条件】

事前条件がインプットに対する違反チェックだとすれば、事後条件はアウトプットに対する違反チェックだと考えると分かりやすいと思います。

提示していただいたコードを例にすると、アウトプットは「a と b の和」になる想定ですが、以下のコードのアプトプットは「a と b の差」となっているので、事後条件の違反となります。

python

1def add_cal(a,b): 2 sum = a - b 3 print(sum) 4 5add_cal(5,3)

【不変条件】

不変条件は、この関数を実行するにあたって必要な「前提となる機能やデータ」の違反チェックです。

以下のコードで言うと、+ 演算子は「数値の和を求める機能」が求められますし、print 関数は「標準出力へ数値を出力する機能」が求められます。

python

1def add_cal(a,b): 2 sum = a + b 3 print(sum) 4 5add_cal(5,3)

この例では、ちょっと分かりづらいかもしれませんので、以下のURLも参考にしてみてください。

契約による設計から見た例外 - Qiita
https://qiita.com/Kokudori/items/2e4bd32abf7abea3186f

3-5. Javaのアサーション
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html

投稿2020/02/27 08:24

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問