Report5

@講義資料オブジェクト指向プログラムJavaIの中のサンプルプログラムについて考察せよ。
(講義資料サンプルプログラム考察については、ローカル変数とクラス変数までとする)
各自オリジナルのサンプルプログラム(全ての講義内容を含んだ、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

〜考察〜

1.class CircleCにおいてdouble型でpaiを定義。

  circleメソッドは引数をrとして円の面積を求める計算を行う。


2.class Demo においてオブジェクトを作成。→これをインスタンス化という。

 a.クラス内のメソッドを使うときは、そのクラスで定義したオブジェクトのどのメソッドであるのかピリオド(.)を付けて指定する。

 b.CircleCのオブジェクトを作成し、circleメソッドの引数rに10を代入。 

3.printlnで結果を出力。

 

■オブジェクトを生成

class ObjSample {
public static void main(String args[]) {
Display obj = new Display(); // クラスDisplayのオブジェクトobj生成
obj.Disp("Hello Java"); // オブジェクトobjのメソッドDispを呼ぶ
}
}
class Display { // クラスDisplayの定義
void Disp(String message) { // メソッドDispの定義
System.out.println(message);
}
}

※実行結果
Hello Java

〜考察〜

1.class Objsampleにてclass Displayをインスタンス化する。


 a.Display obj = new Display();は
  Didplay obj;

    obj = new Display();と同じ意味を持つ。


2.Clas DisplayではDispメソッドにて引数messageをprintlnにて画面に出力させる。



3.Class Objsample内のobj.Disp("Hello Java");でDispメソッドに代入。

 

■四則演算を各計算毎にクラス化している計算プログラム


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

〜考察〜

1.class Comp4には4つのメソッドが含まれている。


   a.addメソッドは加算。引数xとyを加算しreturnで結果を返す。
   b.substractメソッドは減算。引数xからyを減算しreturnで結果を返す。
   c.multiplyメソッドは掛け算。引数xとyを掛け算しreturnで結果を返す。
  d.divideメソッドは割り算。引数xからyを割り算しreturnで結果を返す。


2.class KeisanではComp4 enzan = new Comp4();でクラスComp4のオブジェクトenzan作成し、
 
   a.a=20,b=10を定義し、class Comp4内の各メソッド内に代入。それぞれの結果をwa,sa,seki,shoに代入。


3.plintlnにてそれぞれの結果を出力。

 

■ローカル変数とクラス変数


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.ローカル変数とは、メソッドの内部で宣言した変数のこと。



2.クラス変数とは、メソッドの外部で宣言した変数のこと。   


3.Dispメソッドの外部で定義されたクラス変数nにはobjを介して違うクラスからも代入できる。


4.Dispメソッドの中身はfor文で1からnまで(n=10)i++し、printによって出力。

〜オリジナルプログラム〜

public class Rep5 { // クラスRep5を定義
int n; //クラス変数n
int add(int x, int y) { // メソッドadd(int x,int y)を定義
return x + y + n; // x + y + n を返す
}
int substract(int x, int y) { // メソッドsubstractを定義
return x - y - n; // x - y - n を返す
}
int multiply(int x, int y) { // メソッドmultiplyを定義
return x * y * n; // x * y * nを返す
}
int divide(int x, int y) { // メソッドdivideを定義
return x / y / n; // x / y / n を返す
}
}

class Display {
void Disp(String message) { // メソッドDispの定義
System.out.println(message);
}
}

class Keisan {
public static void main(String args[]) {
int a, b, wa, sa, seki, sho;
Rep5 enzan = new Rep5(); // クラスRep5のオブジェクトenzan作成
a = 400;
b = 20;
enzan.n = 10; //クラスRep5のクラス変数nに10を代入
wa = enzan.add(a, b); // オブジェクトenzanのadd(a,b)を実行
sa = enzan.substract(a, b); // 同上のsubstract(a,b)を実行
seki = enzan.multiply(a, b); // 同上のmultiply(a,b)を実行
sho = enzan.divide(a, b); // 同上のdivide(a,b)を実行
System.out.println(a + " + " + b + " + n " + " = " + wa);
System.out.println(a + " - " + b + " - n " + " = " + sa);
System.out.println(a + " * " + b + " * n " + " = " + seki);
System.out.println(a + " / " + b + " / n " + " = " + sho);
Display obj = new Display(); // クラスDisplayのオブジェクトobj生成
obj.Disp("↑↑↑n=10だよ☆(^^)♪↑↑↑"); // オブジェクトobjのメソッドDispを呼ぶ

}
}

〜実行結果〜

400 + 20 + n = 430
400 - 20 - n = 370
400 * 20 * n = 80000
400 / 20 / n = 2
↑↑↑n=10だよ☆(^^)♪↑↑↑

〜考察〜

1.四則演算を各計算毎にクラス化している計算プログラムにクラス変数を追加してみた。
  a.またDisplayメソッドを定義し、objを作成して文字列を出力してみた。
2.クラスKeisanのなかでオブジェクトenzanを作成後にRep5のクラス変数nに10を代入している。
  a.nが計算に入ったので実行結果がサンプルプログラムとは全然違うものとなった。
 b.今回はint型で指定しているためちゃんと割り切れる数を選んだ。
3.System.out.printlnのなかで最初は(a + " + " + b + " + " + " + " n + " = " + wa);としていたが、
  n=0と定義する必要があり面倒だったので(しかも実行結果にはnでなく0と出力された)現在のような
  " + n "として中にいれることにした。
〜反省&感想〜
 やっとReport5を終わらすことができました。ずるずるとすみません。この調子でreport7に取りかかろうと思います。
 ずるずるとやったおかげで知識自体は身に入ったような気がします。

〜参考文献〜

     a.独習Java 〜第二版〜
     b.浅煎珈琲 Javaアプリケーション入門 http://msugai.fc2web.com/java/index.html