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