pi-8. クラス設計

>100 Views

December 19, 22

スライド概要

トピックス:クラス設計,オブジェクトの状態と状態変化,メソッド内でのみ使用する変数,抽象化の組み合わせ

Java の基本(スライド資料とプログラム例)(全17回)
https://www.kkaneko.jp/pro/pi/index.html

金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

pi-8. クラス設計 トピックス:クラス設計,オブジェクトの状態と 状態変化,メソッド内でのみ使用する変数,抽象 化の組み合わせ URL: https://www.kkaneko.jp/pro/pi/index.html (Java の基本,スライド資料とプログラム例) 金子邦彦 1

2.

アウトライン 番号 項目 復習 8-1 クラスの設計の例 8-2 オブジェクトの状態と状態変化 8-3 演習 8-4 メソッド内でのみ使用する変数 8-5 抽象化の組み合わせ 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 2

3.

クラスとオブジェクト クラスは,同じ種類のオブジェクトの集まりと考え ることができる 人間 学生 学生でもあり人間でもある 人間だが,学生ではない 3

4.

Java のクラス クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue オブジェクト クラス定義のプログラム Ball a = new Ball(8, 10, 1, "blue"); Ball b = new Ball(2, 4, 3, "green"); オブジェクト生成のプログラム a.printout(); b.printout(); 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 4

5.

クラス定義のプログラム クラス名: Ball 4つの属性 メソッド: Ball メソッド: printout このクラス定義を使用した,オブジェクトの生成 a 8 10 1 "red" b 2 x 4 y 3 r "green" color Ball a = new Ball(8, 10, 1, "blue"); Ball b = new Ball(2, 4, 3, "green"); Javaプログラム 5

6.

メソッドアクセス a.printout(); b.printout(); Javaプログラム aやb オブジェクト printout() メソッド 間を「.」で区切っている 6

7.

Java Tutor の起動 ① ウェブブラウザを起動する ② Java Tutor を使いたいので,次の URL を開く http://www.Javatutor.com/ ③ 「Java」をクリック ⇒ 編集画面が開く 7

8.

Java Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. リックして編集画面に戻る 8

9.

Java Tutor 使用上の注意点① • 実行画面で,次のような赤の表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 9

10.

Java Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 10

11.

8-1. クラス設計の例 11

12.

クラスの設計例 ① 1. 2. 3. クラス名は Signal 属性 color は文字列である. 属性 color は “red”, “yellow”, “blue” の 3通り. class Signal { String color; public Signal(String color) { クラス定義 this.color = color; } } public class YourClassNameHere { public static void main(String [] args) { Signal s = new Signal("red"); } } 12

13.

クラスの設計例 ① 1. 2. 3. クラス名は Signal 属性 color は文字列である. 属性 color は “red”, “yellow”, “blue” の 3通り. class Signal { String color; public Signal(String color) { クラス定義 this.color = color; } } 書き間違ってしまっても、 public class YourClassNameHere { 実行できてしまうので、 public static void main(String [] args) { もろいプログラム Signal s = new Signal("rrd"); } 書き間違い } あとで書き間違いを探すのは面倒そう13

14.

演習 資料:13 ~ 15 【トピックス】 • クラス定義 • class • オブジェクト生成(コンスト ラクタ) 14

15.

① Java Tutor のエディタで次のプログラムを入れる 15

16.

② 実行し,結果を確認する. 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 16

17.

③ 「red」を「rrd」と書き換えても実行できる (あとで使うので消さないこと) 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 17

18.

クラスの設計例 ② 1. 2. クラス名は Signal 属性 color は文字列である. 3. 属性 color は “red”, “yellow”, “blue” の 3通り. class Signal { 新しいクラス定義 ・コンストラクタでは、 public Signal() {}; 何も行わない public void red() { this.color = "red"; }; ・メソッド red, yellow, blue public void yellow() { this.color = "yellow"; }; を新設 public void blue() { this.color = "blue"; }; ・「void」は、「メソッド } の返り値なし」の意味 public class YourClassNameHere { String color; public static void main(String [] args) { Signal s = new Signal(); s.red(); } } 18

19.

演習 資料:18 ~ 19 【トピックス】 • クラス設計 19

20.

① Java Tutor のエディタで次のプログラムを入れる 20

21.

② 実行し,結果を確認する (あとで使うので消さないこと) 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 21

22.

まとめ 2つの方法の比較 クラス ① クラス ② プログラムの長さ: ①短い、②長い 不正なデータの混入可能性: ①あり、②なし 22

23.

8-2. オブジェクトの状態と 状態変化 23

24.

オブジェクトの状態と状態変化 信号の状態を、属性 color で扱う • 属性 color は “red”, “yellow”, “blue” の 3通り. • 属性 color は、次のように変化する “blue” “red” “Yellow” 24

25.

状態変化のメソッドの例 class Signal { String color; public Signal() {}; public void red() { this.color = "red"; }; public void yellow() { this.color = "yellow"; }; public void blue() { this.color = "blue"; }; public void go() { if (this.color.equals("blue")) { this.yellow(); } else if (this.color.equals("yellow")) { this.red(); } else if (this.color.equals("red")) { this.blue(); } } } ※ equals メソッドは文字列の比較 25

26.

演習 資料:25 ~ 26 【トピックス】 • オブジェクトの状態変化 26

27.

① Java Tutor のエディタで次のプログラムを入れる 27

28.

② 実行し,結果を確認する 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 28

29.

8-3. 演習 29

30.

オブジェクトの状態と状態変化 製品の状態を、属性 s で扱う • 属性 s は “active”, “deactive” の 2通り. • 属性 s は、次のように変化する “active” メソッド off メソッド on “deactive” 30

31.

ソースコード class Product { String s; public Product() {}; public void active() { this.s = "active"; }; public void deactive() { this.s = "deactive"; }; public void on() { if (this.s.equals("deactive")) { this.active(); } } public void off() { if (this.s.equals("active")) { this.deactive(); } } } public class YourClassNameHere { public static void main(String [] args) { Product p = new Product(); p.deactive(); p.on(); } } 31

32.

演習 資料:31 ~ 32 【トピックス】 • オブジェクトの状態と状態変 化 32

33.

① Java Tutor のエディタで次のプログラムを入れる 33

34.

② 実行し,結果を確認する 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 34

35.

8-4. メソッド内でのみ 使用する変数 35

36.

• メソッド foo : 変数 a を使用 • メソッド main: 変数 p を使用 36

37.

演習 資料:36 ~ 37 【トピックス】 • メソッド内で使用される変数 は,メソッドの実行終了とと もに,自動で消える 37

38.

Java Tutor のエディタで次のプログラムを入れ,実 行し,結果を確認する(あとで使うので消さないこ と) 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 38

39.

• 変数 p は、main の中でのみ利用できる.foo の中 では利用できないから、次のプログラムは動かない 39

40.

8-5. 抽象化の組み合わせ 40

41.

式の抽象化 5 * 100 * 1.1 12 * 100 * 1.1 類似した複数の式 a * 100 * 1.1 変数を使って,複数の 式を1つにまとめる (抽象化) 41

42.

抽象化の組み合わせ 5 * 100 * 1.1 12 * 100 * 1.1 b * 100 * 1.1 a * 1.1 8 * 200 * 1.1 c * 200 * 1.1 16 * 200 * 1.1 抽象化 抽象化 類似した複数の式 42

43.

5 * 100 * 1.1 12 * 100 * 1.1 b * 100 * 1.1 a * 1.1 8 * 200 * 1.1 c * 200 * 1.1 16 * 200 * 1.1 抽象化 抽象化 43

44.

演習 資料:43 ~ 44 【トピックス】 • 抽象化 44

45.

① Java Tutor のエディタで次のプログラムを入れる 45

46.

② 実行し,結果を確認する 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 46

47.

8-2. のプログラム class Signal { String color; public Signal() {}; public void red() { this.color = "red"; }; public void yellow() { this.color = "yellow"; }; public void blue() { this.color = "blue"; }; public void go() { if (this.color.equals("blue")) { this.yellow(); } else if (this.color.equals("yellow")) { this.red(); } else if (this.color.equals("red")) { this.blue(); } } } public class YourClassNameHere { public static void main(String [] args) { Signal s = new Signal(); s.red(); s.go(); } } 47

48.

8-3. のプログラム class Product { String s; public Product() {}; public void active() { this.s = "active"; }; public void deactive() { this.s = "deactive"; }; public void on() { if (this.s.equals("deactive")) { this.active(); } } public void off() { if (this.s.equals("active")) { this.deactive(); } } } public class YourClassNameHere { public static void main(String [] args) { Product p = new Product(); p.deactive(); p.on(); } } 48

49.
[beta]
8-4. のプログラム
public class YourClassNameHere {
public static double foo(double a) {
return a * 1.1;
}
public static void main(String [] args) {
double p;
p = 120;
System.out.printf("%f\n", foo(p));
p = 200;
System.out.printf("%f\n", foo(p));
}
}

49

50.
[beta]
8-5 のプログラム
public class YourClassNameHere {
public static double x(double a) {
return a * 1.1;

}
public static double y(double b) {
return x(b * 100);

}
public static double z(double c) {
return x(c * 200);

}
public static void main(String [] args) {
System.out.printf("%f\n", y(5));
System.out.printf("%f\n", y(12));
System.out.printf("%f\n", z(8));
System.out.printf("%f\n", z(16));
}
}

50

51.

全体まとめ • オブジェクトの属性に、不正なデータが入らない ように、クラスの設計、メソッドを工夫できる • オブジェクトの属性とメソッドを、状態、状態変 化のようにとらえることができる場合がある • 抽象化にはバリエーションがある。(新しい種類 の抽象化を説明します) 51

52.

関連ページ • Java プログラミング入門 GDB online を使用 https://www.kkaneko.jp/pro/ji/index.html • Java の基本 Java Tutor, GDB online を使用 https://www.kkaneko.jp/pro/pi/index.html • Java プログラム例 https://www.kkaneko.jp/pro/java/index.html 52