プログラミング2
Report#5

課題メニュー


A、サンプルプログラム
B、オリジナルプログラム
感想
参考文献・HP


A、サンプルプログラム

●オブジェクト指向プログラム
 ObjectクラスはJavaクラス階層の頂点に位置します。 データとその処理が含まれておりその二つを一体化したものをオブジェクト単位で保管したものをいう。 上位にあるオブジェクトは簡単な記述で継承利用できます。(代表的な言語にJava,C++,Objective-Cなどがあります。)

●サンプルプログラム1

プログラム
class CircleC {                                 // クラス
    double pai = 3.14;                          // データ
    double circle(int r) {                      // メソッド
        return pai * r * r;
    }
}
class Demo {                                    // クラス
    public static void main(String args[]) {    // メソッド
        double area;;
        CircleC obj;                            // オブジェクト
        obj  = new CircleC();
        area = obj.circle(10);
        System.out.println("area = " + area);
    }
}

※実行結果
area = 314.0

●サンプルプログラム2

プログラム
public class Comp4 {                               //クラスComp4を定義
	int add(int x, int y) {                        // メソッドadd(int x,int y)を定義
	      return x + y;                            // x + y を返す
	    }
	    int substract(int x, int y) {              // メソッドsubstractを定義
	      return x - y;                            // x - y を返す
	    }
	    int multiply(int x, int y) {               // メソッドmultiplyを定義
	      return x * y;                            // x * y を返す
	    }
	    int divide(int x, int y) {                 // メソッドdivideを定義
	      return x / y;                            // x / y を返す
	    }
	  }
	  
	  class Keisan {
	    public static void main(String args[]){
	      int a, b, wa, sa, seki, sho;
	      Comp4 enzan = new Comp4();               // クラスComp4のオブジェクトenzan作成
	      a = 20;
	      b = 10;
	      wa   = enzan.add(a, b);                  // オブジェクトenzanのadd(a,b)を実行
	      sa   = enzan.substract(a, b);            // 同上のsubstract(a,b)を実行
	      seki = enzan.multiply(a, b);             // 同上のmultiplu(a,b)を実行
	      sho  = enzan.divide(a, b);               // 同上のdivide(a,b)を実行
	      System.out.println(a + " + " + b + " = " + wa);
	      System.out.println(a + " - " + b + " = " + sa);
	      System.out.println(a + " * " + b + " = " + seki);
	      System.out.println(a + " / " + b + " = " + sho);
	    }
}

※実行結果
20 + 10 = 30
20 - 10 = 10
20 * 10 = 200
20 / 10 = 2

●サンプルプログラム3

プログラム
class Display {
    int n;                                      // クラス変数
    void Disp() {
    	int i;                                     // ローカル変数
      for (i = 1; i <= n; i++)
        System.out.print(i + " ");
    }

  class VarSample {
    public static void main(String args[]) {
      Display obj = new Display();             // クラスDisplayのオブジェクトobj生成
      obj.n = 10;                              // オブジェクトobjの変数nに10を代入
      obj.Disp();                              // オブジェクトobjのDisp()実行
    }
  }
  
※実行結果
1 2 3 4 5 6 7 8 9 10

●考察

(1)サンプルプログラム1
Demoの中にメインが含まれており、メインでCircleCをオブジェクト化している。
ちなみにCircleCのメソッドは三角形の面積を求め、Demoでは半径(r)に10を代入してCircleCのオブジェクト化と呼び出しである。

(2)サンプルプログラム2
これも基本は1と同じである。
Comp4のメソッド(四則演算)をKeisan(メイン)の中で呼び出しa , bにそれぞれ代入してComp4メソッドを行う。

(3)サンプルプログラム3
ローカル変数(n) = メソッド内部で宣言した変数
クラス変数(i) = メソッドの外部で宣言した変数
Displayクラスを中心に考えてみるとiは外部のVarSampleで扱われ、nはDisplay内部で扱われている。

オブジェクト
状態と動作の両方を定義する記憶領域のことです。状態とは一連の変数と値で、動作とは一連のメソッドの事です。
クラスから新しいオブジェクトを生成する事をインスタンス化と言います。

インスタンス化
 クラス名 変数名(任意) = new クラス名();

クラス
クラスとはデータと動作(メソッド)の集まりの事。
クラスではいくつかのオブジェクトが生成可能で、そのオブジェクトとクラスは等価である。

クラスの記述
 class クラス名(任意){
       型 変数名 = 値;                           //データの宣言
	      戻り値型 メソッド名([メソッド引数]) {     //メソッド
           コンピュータ制御
   }
}

ローカル変数
メソッド内部で宣言され、そのメソッドの実行中でしか存在しません。複数のメソッドで、同じ名前のローカル変数を使う事ができます。

クラス変数
まずクラスにはそのスーパークラスで定義された状態と動作が継承されます。
よってオブジェクトではスーパークラスのインスタンス変数のコピーが含まれます。
もし変数名が重なってしまったら、オブジェクトの変数が優先です。

スーパークラスの変数の参照
 super.スーパークラスの変数名


B、オリジナルプログラム

public class Report5 extends Data {
	double pai;
		double sui(int r, int h) {
			return pai * r * r * h / 3;
		}
	}

	class Data {
		public static void main(String args[]) {
		int x, y;
		double area;
		x = 5;
		y = 4;
		Report5 enzan = new Report5();
		enzan.pai = 3.14;
		area = enzan.sui(x, y);
		System.out.print("底辺の円の半径"+x+"高さ"+y+"の円錐の体積は"+area+"です。" );
	}
}

※実行結果
底辺の円の半径5高さ4の円錐の体積は104.66666666666667です。

●考察

Report5は底辺の円の半径5高さ4の円錐の体積を求めるプログラムです。
Report5は体積を求める式のメソッドでDataは値の代入から出力までのクラスです。

感想

オブジェクト指向は理解できましたが、クラス変数がCのグローバル変数と混沌してしまって理解に苦しみました‥

参考文献・HP

・独習Java第2版 『ジョゼフ・オニール著』
・浅煎り珈琲-Javaアプリケーション入門
・Java入門