Report#5


講義資料オブジェクト指向プログラムJavaIの中のサンプルプログラムについて考察せよ。講義資料サンプルプログラム考察については、ローカル変数とクラス変数までとする。各自オリジナルのサンプルプログラム(全ての講義内容を含んだ、1つのコードで可)を作成し考察せよ。

・プログラム(1)

 1:  class CircleC {                                 // クラス
 2:      double pai = 3.14;                          // データ
 3:      double circle(int r) {                      // メソッド
 4:      return pai * r * r;
 5:      }
 6:  }
 7:  class Demo {                                    // クラス
 8:      public static void main(String args[]) {    // メソッド
 9:      double area;
10:      CircleC obj;                            // オブジェクト
11:      obj  = new CircleC();
12:      area = obj.circle(10);
13:      System.out.println("area = " + area);
14:      }
15:  }
・実行結果

[nw0451:~/java/Rep5] j04051% java Demo
area = 314.0

 考察

・プログラムについて
 1:  class CircleC {
 CircleCというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
 2:  double pai = 3.14;
 double型のpaiを宣言し、そのpaiに3.14を代入する。
 3:  double circle(int r) {
 3行〜5行は、circleメソッドの宣言である。int型の引数 r を1つだけ持ち、double型の計算結果を返すcircleというメソッドである。
 4:  return pai * r * r;
 return文という構文。returnの次にくる式が、そのメソッドの戻り値となる。つまり、pai*r*rの計算結果が戻り値となる。
 7:  class Demo {
 Demoというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
 8:  public static void main(String args[]) {
 8行〜14行は、mainメソッドの宣言。mainメソッドが、実行開始位置である。
 9:  double area;
 double型のareaを宣言。
10:  CircleC obj;
 Circleにobjというオブジェクトを宣言。
11:  obj  = new CircleC();
 Circle型として宣言した変数に、新しく作ったCircleクラスのインスタンスを代入する。
12:  area = obj.circle(10);
 circleメソッドを呼び出している。このときcircleの引数 r に10を代入する。pai*r*rを計算し、その答えを戻り値としてDemoメソッドに戻る。戻り値である314.0をareaに代入する。
13:  System.out.println("area = " + area);
 areaの値を表示する。





・プログラム(2)

 1:  class ObjSample {
 2:      public static void main(String args[]) {
 3:      Display obj = new Display();   // クラスDisplayのオブジェクトobj生成
 4:      obj.Disp("Hello Java");        // オブジェクトobjのメソッドDispを呼ぶ
 5:      }
 6:  }
 7:  class Display {                    // クラスDisplayの定義
 8:      void Disp(String message) {      // メソッドDispの定義
 9:      System.out.println(message);
10:      }
11:  }
・実行結果

[nw0451:~/java/Rep5] j04051% java ObjSample
Hello Java

 考察

・プログラムについて
 1:  class ObjSample {
 ObjSampleというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
 2:  public static void main(String args[]) {
 2行〜5行は、mainメソッドの宣言である。mainメソッドが実行開始位置である。
 3:  Display obj = new Display();
 Displayクラスにobjオブジェクトを新しく作る。
 4:  obj.Disp("Hello Java");
 Dispメソッドを呼び出している。このときDispの引数messageに"Hello Java"を代入する。
 7:  class Display {
 Displayというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
 8:  void Disp(String message) {
 8行〜10行は、Dispメソッドの宣言である。String型の引数messageを1つだけ持つ。voidを戻り値の型としているので、Dispメソッドは戻り値の無いメソッドとなる。
 9:  System.out.println(message);
 messageに代入されている値を表示する。





・プログラム(2)

 1:  public class Comp4 {                         // クラスComp4を定義
 2:      int add(int x, int y) {                    // メソッドadd(int x,int y)を定義
 3:      return x + y;                            // x + y を返す
 4:      }
 5:      int substract(int x, int y) {              // メソッドsubstractを定義
 6:      return x - y;                            // x - y を返す
 7:      }
 8:      int multiply(int x, int y) {               // メソッドmultiplyを定義
 9:      return x * y;                            // x * y を返す
10:      }
11:      int divide(int x, int y) {                 // メソッドdivideを定義
12:      return x / y;                            // x / y を返す
13:      }
14:  }
15:
16:  class Keisan {
17:      public static void main(String args[]) {
18:      int a, b, wa, sa, seki, sho;
19:      Comp4 enzan = new Comp4();               // クラスComp4のオブジェクトenzan作成
20:      a = 20;
21:      b = 10;
22:      wa   = enzan.add(a, b);                  // オブジェクトenzanのadd(a,b)を実行
23:      sa   = enzan.substract(a, b);            // 同上のsubstract(a,b)を実行
24:      seki = enzan.multiply(a, b);             // 同上のmultiplu(a,b)を実行
25:      sho  = enzan.divide(a, b);               // 同上のdivide(a,b)を実行
26:      System.out.println(a + " + " + b + " = " + wa);
27:      System.out.println(a + " - " + b + " = " + sa);
28:      System.out.println(a + " * " + b + " = " + seki);
29:      System.out.println(a + " / " + b + " = " + sho);
30:      }
31:  }
・実行結果

[nw0451:~/java/Rep5] j04051% java Keisan
20 + 10 = 30
20 - 10 = 10
20 * 10 = 200
20 / 10 = 2

 考察

・プログラムについて
 1:  public class Comp4 {
 Comp4というクラスを宣言。publicはアクセス制御を表し、classはクラス宣言の始まりを表す予約語である。
 2:  int add(int x, int y) {
 3:  return x + y;
 4:  }
 addメソッドの宣言。int型の引数xとyを持ち、int型の計算結果を返すaddメソッドである。returnの次にくる式が、メソッドの戻り値となる。つまり、x+yの計算結果が戻り値となる。
 5:  int substract(int x, int y) {
 6:  return x - y;
 7:  }
 substractメソッドの宣言。int型の引数xとyを持ち、int型の計算結果を返すsubstractメソッドである。returnの次にくる式がメソッドの戻り値となる。つまり、x-yの計算結果が戻り値となる。
 8:  int multiply(int x, int y) {
 9:  return x * y;
10:  }
 multiplyメソッドの宣言。int型の引数xとyを持ち、int型の計算結果を返すmultiplyメソッドである。returnの次にくる式がメソッドの戻り値となる。つまり、x*yの計算結果が戻り値となる。
11:  int divide(int x, int y) {
12:  return x / y;
13:  }
 divideメソッドの宣言。inf型の引数xとyを持ち、int型の計算結果を返すdivideメソッドである。returnの次ぎにくる式がメソッドの戻り値となる。つまり、x/yの計算結果が戻り値となる。
16:  class Keisan {
 Keisanというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
17:  public static void main(String args[]) {
 mainメソッドの宣言。mainメソッドが実行開始位置である。
18:  int a, b, wa, sa, seki, sho;
 int型の変数a、b、wa、sa、seki、shoを宣言。
19:  Comp4 enzan = new Comp4();
 Camp4クラスに、enzanオブジェクトを新しく作る。
20:  a = 20;
21:  b = 10;
 変数aに20を代入し、変数bには10を代入する。
22:  wa   = enzan.add(a, b);
 addメソッドを呼び出す。このときaddメソッドの引数xとyにa、bを代入する。addメソッドの戻り値をwaに代入する。
23:  sa   = enzan.substract(a, b);
 substractメソッドを呼び出す。このときsubstractの引数xとyに、a、bを代入する。substractメソッドの戻り値をsaに代入する。
24:  seki = enzan.multiply(a, b);
 multiplyメソッドを呼び出す。このときmultiplyの引数xとyに、a、bを代入する。multiplyメソッドの戻り値をsekiに代入する。
25:  sho  = enzan.divide(a, b);
 divideメソッドを呼び出す。このときdivideの引数xとyにa、bを代入する。divideメソッドの戻り値をshoに代入する。
26:  System.out.println(a + " + " + b + " = " + wa);
 aとbの値と、waの値を表示し、改行される。
27:  System.out.println(a + " - " + b + " = " + sa);
 aとbの値と、saの値を表示し、改行する。
28:  System.out.println(a + " * " + b + " = " + seki);
 aとbの値と、sekiの値を表示し、改行する。
29:  System.out.println(a + " / " + b + " = " + sho);
 aとbの値と、shoの値を表示し、改行する。





・プログラム(3)

 1:  class Display {
 2:      int n;                                      // クラス変数
 3:      void Disp() {
 4:      int i;                                   // ローカル変数
 5:      for (i = 1; i <= n; i++)
 6:      System.out.print(i + " ");
 7:      }
 8:  }
 9:
10:  class VarSample {
11:      public static void main(String args[]) {
12:      Display obj = new Display();             // クラスDisplayのオブジェクトobj生成
13:      obj.n = 10;                              // オブジェクトobjの変数nに10を代入
14:      obj.Disp();                              // オブジェクトobjのDisp()実行
15:      }
16:  }
・実行結果

[nw0451:~/java/Rep5] j04051% java 
1 2 3 4 5 6 7 8 9 10 

 考察

・プログラムについて
 1:  class Display {
 Displayというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
 2:  int n;
 int型の変数nを宣言。メソッド外で宣言されているため、クラス変数になる。
 3:  void Disp() {
 Dispメソッドの宣言。voidを戻り値の型としているので、Dispメソッドは戻り値の無いメソッドとなる。
 4:  int i;
 int型の変数iを宣言。メソッド内で宣言されているため、ローカル変数(局所変数)となる。
 5:  for (i = 1; i <= n; i++)
 6:       System.out.print(i + " ");
 7:  }
 iの初期値を1とし、iがn以下の間、処理を繰り返す。条件文が真の時、iとスペースを表示する。
10:  class VarSample {
 VarSampleというクラスを宣言。classはクラス宣言の始まりを表す予約語である。
11:  public static void main(String args[]) {
 mainメソッドの宣言。mainメソッドが、実行開始位置である。
12:  Display obj = new Display();
 Displayクラスにobjオブジェクトを、新しく作る。
13:  obj.n = 10;
 オブジェクトobjの変数nに10を代入する。
14:  obj.Disp();
 Dispメソッドを呼び出す。





・オリジナルプログラム

 1:  class Rep5 {
 2:       int width;
 3:       int height;
 4:       Rep5() {
 5:              setSize(10,20);
 6:       }
 7:       Rep5(int w, int h) {
 8:              setSize(w, h);
 9:       }
10:       void setSize(int w, int h) {
11:              width = w;
12:              height = h;
13:       }
14:       int getArea() {
15:              return width * height;
16:       }
17:  }
18:
19:  class RectangleExample {
20:       public static void main(String[] args) {
21:            Rep5 r1 = new Rep5();
22:            System.out.println("r1.width = " + r1.width);
23:            System.out.println("r1.height = " + r1.height);
24:            System.out.println("r1.getArea() = " + r1.getArea());
25:            System.out.println(" ");
26:            Rep5 r2 = new Rep5(123, 45);
27:            System.out.println("r2.width = " + r2.width);
28:            System.out.println("r2.height = " + r2.height);
29:            System.out.println("r2.getArea() = " + r2.getArea());
30:            System.out.println(" ");
31:       }
32:  }
・実行結果

 r1.width = 10
 r1.height = 20
 r1.getArea() = 200

 r2.width = 123
 r2.height = 45
 r2.getArea() = 5535

 考察

・プログラムについて

オブジェクト指向とは

 オブジェクト指向とは、オブジェクトを大切にする考え方のことである。オブジェクトを大切にし、オブジェクトをプログラミングの中心に置き、プログラムによってオブジェクトを記述する事である。

 例として、
  ・クラス   ……一般的な「科目」
  ・インスタンス……具体的な「国語、63点」
  ・フィールド ……個々の「科目の名前」と「点数」
  ・メソッド  ……toStringなど…

 オブジェクトとは「インスタンス」のことである。科目クラスの具体的な「国語、63点」は、科目クラスの1つのオブジェクトということができる。オブジェクトはフィールドとメソッドを持っていて、フィールドは情報を保持し、メソッドはオブジェクトに対する操作を定める
  「オブジェクト=フィールド+メソッド」であり、「オブジェクト=それは何か+それをどうするか」ということである。
 オブジェクト(インスタンス)は、クラスから作られる。フィールドとメソッドを一まとまりとして扱うこと、情報と操作を一まとまりとして記述すること、「それは何か」と「それをどうするか」を一まとまりとして書くこと、それがオブジェクト指向の本質である。

クラス

メソッド

オブジェクト

インスタンス

感想・反省


参考文献

 独習Java 第2版            ジョセフ・オニール 著
 Jave入門                河西朝雄 著
 Java言語プログラミングレッスン上・下  結城浩 著