>100 Views
January 26, 22
スライド概要
トピックス:クラス,class,メソッド,コンストラクタ,new,this(Java Tutor による演習)
Java の基本(スライド資料とプログラム例)(全17回)
https://www.kkaneko.jp/pro/pi/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
pi-7. クラス,メソッド, オブジェクト生成(コ ンストラクタ) トピックス:クラス,class,メソッド,コンスト ラクタ,new,this URL: https://www.kkaneko.jp/pro/pi/index.html (Java の基本,スライド資料とプログラム例) 金子邦彦 1
全体まとめ クラス 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
全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 3
アウトライン 7-1 7-2 7-3 7-4 項目 復習 クラスとオブジェクト クラス定義,class,オブジェクト生 成(コンストラクタ),new メソッドアクセス,属性アクセス, this 演習 4
オブジェクトとメソッド hero.moveDown() hero オブジェクト moveDown() メソッド 間を「.」で区切っている • メソッド: オブジェクトに属する操作や処理. • メソッド呼び出しでは,引数を指定することがある.引数 (ひきすう)は,メソッドに渡す値のこと hero.attack("fence", 36, 26) 5
Java プログラムの書き方 プログラムの例 x = 100 a = x + 200 enermy1 = hero.findNearestEnemy() hero.attack(enemy1) • 代入:オブジェクト名 + 「=」 + 式または値またはメソッド呼び出し • メソッドアクセス:オブジェクト名 + 「.」 + メソッド名 +「()」 (引数を付けることも) その他,属性アクセス,関数呼び出し,制御,「*」, 「+」などの演算子,コマンド,定義など 6
Java Tutor の起動 ① ウェブブラウザを起動する ② Java Tutor を使いたいので,次の URL を開く http://www.Javatutor.com/ ③ 「Java」をクリック ⇒ 編集画面が開く 7
Java Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. リックして編集画面に戻る 8
Java Tutor 使用上の注意点① • 実行画面で,次のような赤の表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 9
Java Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 10
Java Tutor でのステップ実行 ステップ実行により,プログラム実行の流れ を確認できる 11
7-1. クラスとオブジェクト 12
クラスとオブジェクト クラスは,同じ種類のオブジェクトの集まりと考え ることができる 人間 学生 学生でもあり人間でもある 人間だが,学生ではない 13
同じクラスの2つのオブジェクト 半径 1,場所(8, 10) 色 blue 半径 3,場所(2, 4) 色 green 14
クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue • 2つのオブジェクトともに, 同じクラス Ball と考えることができる • オブジェクトは属性を持つ. 半径,場所,色などの属性 オブジェクト 半径 3,場所(2, 4) 色 green 15
7-2. クラス定義,class, オブジェクト生成(コンストラク タ),new 16
クラス定義の例 クラス名: Ball メソッド: Ball, printout 属性: x, y, r, color ※ Ball はコンストラクタ (オブジェクト生成のためのメソッド) 17
クラス定義のプログラム クラス名: 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
メソッドアクセス a.printout(); b.printout(); Javaプログラム aやb オブジェクト printout() メソッド 間を「.」で区切っている 19
演習 資料:21 ~ 27 【トピックス】 • クラス定義 • class • オブジェクト生成(コンスト ラクタ) • メソッドアクセス 20
① Java Tutor のエディタで次のプログラムを入れる クラス定義,オブジェクト生成,メソッドアクセス クラス定義 字下げにより,プログラムが見やすくなる 21
プログラムの続き オブジェクト生成 メソッドアクセス 字下げにより,プログラムが見やすくなる 22
② 実行し,結果を確認する. メソッド printout による表示 右下をドラッグして 表示枠を広げる オブジェクト a, b 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 23
③「First」をクリックして,プログラム実行を 先頭に戻す 24
④「Step 1 of 38」と表示されているので, 全部で,ステップ数は 38 あることが分かる (ステップ数と,プログラムの行数は違うもの) 25
⑤ 先頭に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は main メソッドの先頭に戻っている 26
⑥ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認しなさい. ※「Next」ボタンを何度か押し,それ以上進めな くなったら終了 あとで使うので,プログラムを消さずに残しておくこと ジャンプ している 実行が進むと, オブジェクトが更新される 27
まとめ • クラス定義では,クラス名の指定と,メソッド定 義を行う. クラス名: Ball 4つの属性 メソッド: Ball メソッド: printout • キーワード class クラス 28
7-3. メソッドアクセス,属性アク セス,this 29
メソッドと属性 • メソッドや属性は,クラスに属する • メソッド内のプログラムは,そのメソッドが所属 するクラスの属性やメソッドへのアクセス権があ る 30
this による属性アクセス,メソッドアクセス • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 • メソッド外では「オブジェクト名」 + 「.」 31
演習 資料:33 ~ 34 【トピックス】 • this によるアクセス 32
① Java Tutor のエディタで次のプログラムを追加 【追加】 メソッド定義内の属性アクセス public double dist() { return this.x + this.y; } 【追加】 メソッド外のメソッドアクセス System.out.println(a.dist()); 33
② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 右下をドラッグして 表示枠を広げる 表示が増える 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 34
7-4. 演習 35
メソッド • 上下左右の移動を考える • オブジェクトの属性 x, y を増減 • そのためのメソッド move を定義 y 左 x が減る 上 y が増える 右 x が増える 下 y が減る x 36
演習 資料:38 ~ 41 【トピックス】 • メソッド定義 • 「.」を用いたメソッドへのア クセス 37
① 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
② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 右下をドラッグして 表示枠を広げる 表示が変わる 表示が変わる 表示が変わる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 39
演習問題 • 右に動かすためのメソッド right を定義 • 左に動かすためのメソッド left を定義 • right を使って,オブジェクト a を右に 5 動かす • Left を使って,オブジェクト b を左に 10 動かす 40
演習問題の解答例 右に移動するメソッド 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
実行し,結果を確認してみる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 42
上や下に動かすためのメソッドを、 メソッド left, right を参考に作ってみなさい。 43
全体まとめ クラス 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
全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは this +「.」 45
関連ページ • 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 46
資料中のソースコード 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
資料中のソースコード 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
資料中のソースコード 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
資料中のソースコード 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