Report4-2
		2003/11/17
		
		!!!  This Page Is Made By Shift JIS  !!!
		



オブジェクトとは?

ある一連の動作を一つにまとめたものです。
具体的にオブジェクトとは!と説明するのはとても難しいので
例のプログラムを見ながら説明したいと思います。

プログラム

[pw040:prgm/java/rep#4]j03040% cat keisan.java

1:public class keisan{
2:   public static void main(String args[]){
3:        int a,b,wa,sa,seki,sho;		/*変数宣言*/
4:        Input input=new Input();		/*Inputオブジェクトを作る*/
5:        conp4 enzan=new conp4();		/*conp4オブジェクトを作る*/
6:
7:        System.out.print("Input \"a\" Date(not 0)----->");
8:        a=input.hit();		/*Inputのhitメソッドを呼び出している*/
9:        System.out.print("Input \"b\" Date(not 0)----->");
10:        b=input.hit();
11:
12:        wa=enzan.add(a,b);		/*conp4のaddメソッドを使う*/
13:        sa=enzan.sub(a,b);		/*conp4のsubメソッドを使う*/
14:        seki=enzan.mult(a,b);	/*conp4のmultメソッドを使う*/
15:        sho=enzan.div(a,b);		/*conp4のdicメソッドを使う*/
16:
17:        System.out.println(a + " + " + b + " = " + wa);
18:        System.out.println(a + " - " + b + " = " + sa);
19:        System.out.println(a + " * " + b + " = " + seki);
20:        System.out.println(a + " / " + b + " = " + sho);
21:    }
22:}

---------------------------実行結果----------------------------------------

[pw040:prgm/java/rep#4] j03040% java keisan
Input "a" Date(not 0)----->100
Input "b" Date(not 0)----->5
100 + 5 = 105
100 - 5 = 95
100 * 5 = 500
100 / 5 = 20

8,10行目で変数に値を入力させています。
12〜15行目で格変数に足し算、引き算、かけ算、わり算の結果を代入しています。
しかし、どこにも数字を入力させる処理や演算を行う処理は書いていませんよね?
それは、入力する処理と演算を行う処理をまとめて、別に作っておいたからです。
この『処理をまとめる』という作業がオブジェクトを作るという事なんです!

例のプログラムの場合は
○入力する
○演算する
という2つの処理をそれぞれオブジェクトをつくってあるんです。
そしてmainメソッドからそれらのオブジェクトを呼び出して使っています。

ではオブジェクトの中身
[pw040:prgm/java/rep#4] j03040% cat Input.java

1:import java.io.*;		/*java.io.*を読み込む*/
2:public class Input		/*Inputクラス*/
3:    int hit(){		/*hitメソッド*/
4:        BufferedReader Reader=
5:            new BufferedReader(
6:                               new InputStreamReader(System.in),1);
7:
8:        String date;
9:        try{
10:            date=Reader.readLine();		/*データを入力*/
11:            return Integer.parseInt(date);	/*int型に変換してreturn*/
12:        }catch(Exception e){		/*エラー処理*/
13:            return 0;
14:        }
15:    }
16:}

[pw040:prgm/java/rep#4] j03040% cat conp4.java

1:public class conp4{
2:    int add(int x,int y){		/*addメソッド*/
3:        return x+y;		/*足し算して結果をreturn*/
4:    }
5:    int sub(int x,int y){		/*subメソッド*/
6:        return x-y;		/*引き算して結果をreturn*/
7:    }
8:    int mult(int x,int y){		/*mulitメソッド*/
9:        return x*y;		/*かけ算して結果をreturn*/
10    }
11:    int div(int x,int y){		/*divメソッド*/
12:       return x/y;		/*わり算して結果をreturn*/
13:    }
14:}


このように、処理をまとめてインスタンス化するのが
オブジェクト指向の考え方です。

インスタンスとは?

インスタンスとは、、、、、まぁ簡単に言うとオブジェクトの事です。
オブジェクトを作ることをインスタンスを作成すると言います

各オブジェクトは、それぞれ独立しているので、
そのオブジェクトの状態を表す必要があります。
そのためオブジェクトは、自身の状態を示すフィールドを持っています。
そのフィールドの事をインスタンスフィールドといい、
オブジェクトはインスタンスフィールドによりその状態を表しているわけです。
そして、その状態をメソッドにより変更する事によりオブジェクトの状態を変えるわけです。


それでは実際にインスタンス化してみましょう

インスタンス化=オブジェクト作る

例のプログラムを見てみましょう。
インスタンス化はmainメソッドの中で行います。
keisan.javaで説明してみます。

クラス名 入れ物の名前
conp4  =       new enzan;
まず、使いたいオブジェクトを呼び出すための変数?みたいなものを
つくります。(ここでは入れ物って呼ぶことにします)
でもこれだと、ただの入れ物だけで中身がありません、
そこで入れ物の中身を入れなければいけません,その処理が↓です
入れ物の名前=new クラス名();
enzan=new conp4();
こうする事で入れ物の中に、中身(オブジェクト)を入れます。
だけど実際には、オブジェクト本体が入っているわけではなく
本体のIDが入っています。(アドレスみたいなものかな?)
C言語でいうポインタ変数みたいなものです。
この入れ物の事をインスタンス変数といいます

このような一連の作業をインスタンス化するといいます。


インスタンスフィールドへのアクセス

オブジェクトの中にあるメソッドの使い方です。
使い方は
インスタンス変数.メソッド名です。
こうする事で使う事ができます。


感想・反省

今回のレポートは、、、とても難しかったです。
解答のほうはすぐにできたけど、オブジェクトの考察が山でした。
なんとか終わったけど、、、これでよかったの?って感じです。
年が明ける頃には、、オブジェクトとは!!って自信を持って言えるようになりたいですね

参考文献

http://www.mybrain.jp/java/index.html
http://www.asahi-net.or.jp/~dp8t-asm/java/
http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html