pi-7. クラス,メソッド,オブジェクト生成(コンストラクタ)

-- Views

January 26, 22

スライド概要

トピックス:クラス,class,メソッド,コンストラクタ,new,this(Java Tutor による演習)

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-7. クラス,メソッド, オブジェクト生成(コ ンストラクタ) トピックス:クラス,class,メソッド,コンスト ラクタ,new,this(Java Tutor による演習) URL: https://www.kkaneko.jp/cc/pi/index.html (Java の基本) 金子邦彦 1

2.

全体まとめ クラス 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 メソッドアクセスのプログラム 2

3.

全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 3

4.

アウトライン 7-1 7-2 7-3 7-4 項目 復習 クラスとオブジェクト クラス定義,class,オブジェクト生 成(コンストラクタ),new メソッドアクセス,属性アクセス, this 演習 4

5.

オブジェクトとメソッド hero.moveDown() hero オブジェクト moveDown() メソッド 間を「.」で区切っている • メソッド: オブジェクトに属する操作や処理. • メソッド呼び出しでは,引数を指定することがある.引数 (ひきすう)は,メソッドに渡す値のこと hero.attack("fence", 36, 26) 5

6.

Java プログラムの書き方 プログラムの例 x = 100 a = x + 200 enermy1 = hero.findNearestEnemy() hero.attack(enemy1) • 代入:オブジェクト名 + 「=」 + 式または値またはメソッド呼び出し • メソッドアクセス:オブジェクト名 + 「.」 + メソッド名 +「()」 (引数を付けることも) その他,属性アクセス,関数呼び出し,制御,「*」, 「+」などの演算子,コマンド,定義など 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.

Java Tutor でのステップ実行 ステップ実行により,プログラム実行の流れ を確認できる 11

12.

7-1. クラスとオブジェクト 12

13.

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

14.

同じクラスの2つのオブジェクト 半径 1,場所(8, 10) 色 blue 半径 3,場所(2, 4) 色 green 14

15.

クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue • 2つのオブジェクトともに, 同じクラス Ball と考えることができる • オブジェクトは属性を持つ. 半径,場所,色などの属性 オブジェクト 半径 3,場所(2, 4) 色 green 15

16.

7-2. クラス定義,class, オブジェクト生成(コンストラク タ),new 16

17.

クラス定義の例 クラス名: Ball メソッド: Ball, printout 属性: x, y, r, color ※ Ball はコンストラクタ (オブジェクト生成のためのメソッド) 17

18.

クラス定義のプログラム クラス名: 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プログラム 18

19.

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

20.

演習 資料:21 ~ 27 【トピックス】 • クラス定義 • class • オブジェクト生成(コンスト ラクタ) • メソッドアクセス 20

21.

① Java Tutor のエディタで次のプログラムを入れる クラス定義,オブジェクト生成,メソッドアクセス クラス定義 字下げにより,プログラムが見やすくなる 21

22.

プログラムの続き オブジェクト生成 メソッドアクセス 字下げにより,プログラムが見やすくなる 22

23.

② 実行し,結果を確認する. メソッド printout による表示 右下をドラッグして 表示枠を広げる オブジェクト a, b 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 23

24.

③「First」をクリックして,プログラム実行を 先頭に戻す 24

25.

④「Step 1 of 38」と表示されているので, 全部で,ステップ数は 38 あることが分かる (ステップ数と,プログラムの行数は違うもの) 25

26.

⑤ 先頭に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は main メソッドの先頭に戻っている 26

27.

⑥ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認しなさい. ※「Next」ボタンを何度か押し,それ以上進めな くなったら終了 あとで使うので,プログラムを消さずに残しておくこと ジャンプ している 実行が進むと, オブジェクトが更新される 27

28.

まとめ • クラス定義では,クラス名の指定と,メソッド定 義を行う. クラス名: Ball 4つの属性 メソッド: Ball メソッド: printout • キーワード class クラス 28

29.

7-3. メソッドアクセス,属性アク セス,this 29

30.

メソッドと属性 • メソッドや属性は,クラスに属する • メソッド内のプログラムは,そのメソッドが所属 するクラスの属性やメソッドへのアクセス権があ る 30

31.

this による属性アクセス,メソッドアクセス • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 • メソッド外では「オブジェクト名」 + 「.」 31

32.

演習 資料:33 ~ 34 【トピックス】 • this によるアクセス 32

33.

① Java Tutor のエディタで次のプログラムを追加 【追加】 メソッド定義内の属性アクセス public double dist() { return this.x + this.y; } 【追加】 メソッド外のメソッドアクセス System.out.println(a.dist()); 33

34.

② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 右下をドラッグして 表示枠を広げる 表示が増える 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 34

35.

7-4. 演習 35

36.

メソッド • 上下左右の移動を考える • オブジェクトの属性 x, y を増減 • そのためのメソッド move を定義 y 左 x が減る 上 y が増える 右 x が増える 下 y が減る x 36

37.

演習 資料:38 ~ 41 【トピックス】 • メソッド定義 • 「.」を用いたメソッドへのア クセス 37

38.

① Java Tutor のエディタで次のプログラムを追加 メソッド定義 public void move(double xx, double yy) { this.x = this.x + xx; this.y = this.y + yy; } 「.」でメソッドにアクセス a.move(5, 5); b.move(10, 10); 38

39.

② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 右下をドラッグして 表示枠を広げる 表示が変わる 表示が変わる 表示が変わる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 39

40.

演習問題 • 右に動かすためのメソッド right を定義 • 左に動かすためのメソッド left を定義 • right を使って,オブジェクト a を右に 5 動かす • Left を使って,オブジェクト b を左に 10 動かす 40

41.

演習問題の解答例 右に移動するメソッド right, 左に移動するメソッド left メソッド定義 public void right(double xx) { this.move(xx, 0); } public void left(double xx) { this.move(-xx, 0); } 「.」でメソッドにアクセス a.left(5); b.right(10); 41

42.

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

43.

上や下に動かすためのメソッドを、 メソッド left, right を参考に作ってみなさい。 43

44.

全体まとめ クラス 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 メソッドアクセスのプログラム 44

45.

全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 45

46.

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

47.
[beta]
資料中のソースコード 7-2
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
}

public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.printout();
b.printout();
}
}

47

48.
[beta]
資料中のソースコード 7-3
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.printout();
b.printout();
System.out.println(a.dist());
}
}

48

49.
[beta]
資料中のソースコード 7-4
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
public void move(double xx, double yy) {
this.x = this.x + xx;
this.y = this.y + yy;
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.move(5, 5);
b.move(10, 10);
a.printout();
b.printout();
System.out.println(a.dist());
}
}

49

50.
[beta]
資料中のソースコード 7-4
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
public void move(double xx, double yy) {
this.x = this.x + xx;
this.y = this.y + yy;
}
public void right(double xx) {
this.move(xx, 0);
}
public void left(double xx) {
this.move(-xx, 0);
}
}

public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.move(5, 5);
b.move(10, 10);
a.left(5);
b.right(10);
a.printout();
b.printout();
System.out.println(a.dist());
}
}

50