HOME> Javaアプリケーション講座>例外>事前条件・事後条件・不変条件

事前条件・事後条件・不変条件

アサーションは様々な条件を検証するときに使用されます。

このときの条件には、事前条件、事後条件、不変条件の三種類あります。 順番に見ていきます。

事前条件

事前条件とはメソッド実行時に引数の値をチェックしてメソッド内の処理に必要な
前提条件を検証します。

では、サンプルプログラムを見ていきます。

サンプルプログラム(Sample66.java)

class Sample66{
    public static void main(String args[]){
     Sample66 obj = new Sample66();
     obj.method(3);

} void method(int i){ assert (i > 0) && (i < 5) : "引数値が不正です。"; System.out.println("i の 値は 0 < i < 5 です。"); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します。

Sample66.javaでは、method(int i)で引数にint 型の iを指定しています。

そのiの値をチェックしていて iの値が 0 < i < 5 の値が今回検証する条件になります。
iの値が3を渡しているのでアサーションエラーはスローされることなく次に制御が移ります。


では、折角だからアサーションエラーになるサンプルも見てみましょう。

サンプルプログラム(Sample66_1.java)

class Sample66_1{
    public static void main(String args[]){
 Sample66_1 obj = new Sample66_1();
     obj.method(6);

} void method(int i){ assert (i > 0) && (i < 5) : "引数値が不正です。"; System.out.println("i の 値は 0 < i < 5 です。");
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

インターネットショップ ナンバーワンの安さに挑戦!
激安!家電のタンタンショップです。
Windows7 PCも快適に!10のアプリ


コンパイル・実行してみます。

今度は引数の値に6を渡したのでアサーションエラーになりました。
これが事前条件です。

事後条件

事後条件はメソッドの処理後に満たしていなければいけないことを検証します。

サンプルプログラム(Sample66_2.java)

class Sample66_2{


    public static void main(String args[]){


    Sample66_2 obj = new Sample66_2();
    obj.method(2,4);


   }


 void method(int a,int b){


  int c = 0;


  //事前条件
  assert a > 0 && b > 0: "aまたはbが0以下です";

  for(int i = 0;i < b; i++){
    System.out.println("a の値は" + a);
    System.out.println("b の値は" + b);
    System.out.println("c の値は" + c);
     System.out.println("----------------");
    c = a + c;
    }

   //事後条件
   assert c >= a :"c の値はaより小さいです";
   System.out.println(a);
   System.out.println(b);
   System.out.println(c);
   }
}
  

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

FC2レンタルサーバー>>>


コンパイル・実行してみます。

実行結果はこのようになります。
まず、ここではa と b の値は問題ないと思います。

for文の中でcの値を a + c に代入しているのでcの値だけが変化しているのがわかります。

それをアサーションでcの値がaよりも小さければアサーションエラーが出力されますが、
ここでは、a と c を加算しているのでアサーションエラーは出ません。
これを以下のように書き換えればもちろんアサーションエラーになります。

サンプルプログラム(Sample66_3.java)

class Sample66_3{


    public static void main(String args[]){


 Sample66_3 obj = new Sample66_3();


    obj.method(2,4);
   }


 void method(int a,int b){


  int c = 0;


  //事前条件
  assert a > 0 && b > 0: "aまたはbが0以下です";

  for(int i = 0;i < b; i++){
    System.out.println("a の値は" + a);
    System.out.println("b の値は" + b);
    System.out.println("c の値は" + c);
     System.out.println("----------------");
    c = a - c;
    }

   //事後条件
   assert c >= a :"c の値はaより小さいです";

   System.out.println(a);
   System.out.println(b);
   System.out.println(c);
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

今度は、aからcを減算した値をcに代入してみました。
この結果アサーションの条件式がfalseが返されますので、アサーションエラーが出力します。

不変条件

不変条件とは、プログラムが正常に動作するために常にtrueである条件を検証します。

ページのトップへ戻る