Report5


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

クラスとオブジェクト
プログラム
1:    class Shape{
2:        int x = 10;
3:        double pai = 3.14;
4: 
5:	  double square(int height,int width){
6:	      return height*width;
7:	  }
8: 
9:	  void cube(){
10:	      int y = x*x*x;
11:	      System.out.println("立方体 cube = " + y);
12:	  }
13:     
14:     }
15:     
16:     class Kazu{
17:         int a = 0;
18:	    int b = 0;
19:	    int c = 0;
20:     
21:	   void disply(){
22:	       System.out.println("before");
23:            System.out.println("a = " + a);
24:	       System.out.println("b = " + b);
25:	       System.out.println("c = " + c);
26:   	       int b = 10;
27:	       int c = 20;
28:	       System.out.println("after");
29:	       System.out.println("a = " + a);
30:	       System.out.println("b = " + b);
31:	       System.out.println("c = " + c);
32:	   }
33:     
34:	   void disply2(){
35:	       System.out.println("同じクラスで違うメソッド");
36:	       System.out.println("a = " + a);
37:	       System.out.println("b = " + b);
38:	       System.out.println("c = " + c);
39:	   }
40:     }
41:public class Repo5test05{
42:    public static void main(String[] args) {
43:        double area;
44:	   Shape object;
45:	   object = new Shape();
46:	   area = object.square(10,20);
47:
48:	   System.out.println("四角形 square = " + area);
49:
50:	   object.cube();
51:	   object.x = 5;
52:	   object.cube();
53:
54:	   Kazu object2 = new Kazu();
55:	   object2.disply();
56:	   object2.disply2();
57:   }
58:}
    
結果
四角形 square = 200.0
立方体 cube = 1000
立方体 cube = 125
before
a = 0
b = 0
c = 0
after
a = 0
b = 10
c = 20
同じクラスで違うメソッド
a = 0
b = 0
c = 0
    
考察
1行目:クラスShapeを定義している
2行目:int型の変数xを宣言し、10を代入している
3行目:double型の変数paiを宣言し、3.14を代入している
5行目:メソッドsquare()を定義している。int型の変数heightとwidthを持つ
6行目:height*widthの値を返す
9行目:メソッドcube()を定義している
10行目:int型の変数yに変数xの三乗を代入している
11行目:メソッドprintln()でyの値を出力

16行目:クラスKazuを定義している
17~19行:int型の変数a,b,cに0を代入
21行目:メソッドdisply()を定義している
23~25行:変数a,b,cの値を出力している
26,27行:変数b,cにそれぞれ10,20を代入している。
29~31行:変数a,b,cの値を出力している
34行目:メソッドdisply2を定義している
36~38行:変数a,b,cの値を出力している

41行目:クラスRepo5test05を定義している
42行目:メソッドmain()を定義している
43行目:double型の変数areaを宣言している
44行目:クラスShapeのオブジェクト変数objectを宣言している
45行目:クラスShapeのオブジェクトを作成している
46行目:作成したオブジェクトのメソッドsquare()に引数として10,20を与えて実 行させる。返ってきた値を変数areaに代入する
48行目:変数areaの値を出力する
50行目:メソッドcube()を実行する
51行目:オブジェクトの変数xに5を代入する
52行目:メソッドcube()を実行する
54行目:クラスKazuのオブジェクト変数を宣言し、オブジェクトを作成する
55行目:メソッドdisply()を実行
56行目:メソッドdisply2()を実行

このプログラムにはShape,Kazu,Repo5test05の3つのクラスがある
クラスとは設計図(型枠)にあたり、オブジェクトとは設計図をもとに作られた製品と考 えることが出来る
クラスの例として大学生を見ると学籍番号や所属学科などのデータや「講義を受 ける」「帰宅する」「バイトに行く」などの共通に持っている機能がある
このうちデータの方を変数mまたはフィールド、機能の方をメソッドという

45行目で使っているnew演算子は型枠であるクラスに対する実体をコンピュータ のメモリの中に作り出している
作り出されたものを「インスタンス」と呼んでいる。また、新しいオブジェクト を作ることを「インスタンス化する」とも言ったりする

インスタンス化したものは「オブジェクト変数名.クラス内の変数」でそのクラ ス内の変数を変えることができる
51行目がこれに相当する
また、メソッドの利用も同じようにしてやる。「オブジェクト変数名.クラス内 のメソッド」で利用できる。
46,50,52,55,56行目がこれに相当する

ローカル変数とクラス変数
クラス変数とはそのクラスのメソッドの外で宣言された変数のことである
このプログラムでは2,3,17~19行目で宣言されている変数がクラス変数である

ローカル変数とはメソッドの中で宣言された変数のことである
このプログラムでは10,26,27行目で宣言されている変数がローカル変数である
ローカル変数は宣言されたメソッドの中でしか変数の値を記憶できない。
55,56行目で同じクラスから異なったメソッドを呼び出している。最初に実行 したメソッドのローカル変数の値は、次に呼び出されたメソッドの値と異なる。

感想・反省
今回はクラスとメソッドの考察。勉強してクラスとメソッドの意味をある程度は 理解することが出来たが、オブジェクト指向についての理解はほとんど出来てい ない。手続き型言語との違いが区別できないからです。
どこかに分かりやすく二つの違いを解説したWebページはないですか?

参考
独学Java第二版
ジョセフ・オニール著
浅煎り珈琲Javaアプリケーション入門