pi-5. メソッド,抽象化

>100 Views

January 26, 22

スライド概要

Java の基本
URL: https://www.kkaneko.jp/cc/pi/index.html

profile-image

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

シェア

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

各ページのテキスト
1.

pi-5. メソッド,抽象化 (Java の基本) URL: https://www.kkaneko.jp/cc/pi/index.html 金子邦彦 1

2.

メソッドの作成で気を付けたいこと • メソッドの設計 • オブジェクトの状態と状態変化 • メソッド内でのみ利用する変数 • 抽象化の組み合わせ 2

3.

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

4.

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

5.

5-1.クラス設計の例 5

6.

クラスの設計例 ① 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"); } } 6

7.

クラスの設計例 ① 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"); } 書き間違い } あとで書き間違いを探すのは面倒そう 7

8.

クラスの設計例 ② 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(); } } 8

9.

Java Tutor Java などのプログラミング言語の体験, 演習ができるオンラインサービス ① ウェブブラウザで次の URL を開く http://www.pythontutor.com/ 9

10.

使用上の注意点1 • 次のような表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 10

11.

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

12.

② 「Java Tutor」をクリック 12

13.

③ Java Tutor で,次のソースコードを入れて実行. 実行結果を確認(あとで使うので消さないこと) 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code 13 をクリック

14.

④ 「red」を「rrd」と書き換えても実行できる (あとで使うので消さないこと) 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code 14 をクリック

15.

⑤ Java Tutor で,次のソースコードを入れて実行. 実行結果を確認(あとで使うので消さないこと) 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code 15 をクリック

16.

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

17.

5-2.オブジェクトの状態と 状態変化 17

18.

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

19.

状態変化のメソッドの例 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 メソッドは文字列の比較 19

20.

① Java Tutor で,次のソースコードを入れる 20

21.

② 実行.実行結果を確認 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code をクリック 21

22.

5-3.まとめ実習 22

23.

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

24.

ソースコード 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(); } } 24

25.

① Java Tutor で,次のソースコードを入れる 25

26.

② 実行.実行結果を確認 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code をクリック 26

27.

キーワード • void メソッドの返り値なし • else if 直前の if で、条件に合致しなった場合、 別の条件で判断 27

28.

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

29.

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

30.

実習の指示 • 次のことを理解しマスターする 「メソッド内で使用される変数は, メソッドの実行終了とともに,自 動で消える」 30

31.

① Java Tutor で,次のソースコードを入れて実行. 実行結果を確認(あとで使うので消さないこと) 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code 31 をクリック

32.

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

33.

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

34.

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

35.

抽象化の組み合わせ 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 抽象化 抽象化 類似した複数の式 35

36.

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 抽象化 抽象化 36

37.

① Java Tutor で,次のソースコードを入れて実行. 実行結果を確認 37

38.

② 実行.実行結果を確認 実行結果を確認 Visualize Execution をクリック, Last をクリック ※ 編集画面に戻るには Edit this code をクリック 38

39.

5-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(); } } 39

40.

5-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(); } } 40

41.
[beta]
5-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));
}
}

41

42.
[beta]
5-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));
}
}

42