pi-13. 今までの総まとめ

>100 Views

January 26, 22

スライド概要

トピックス:メソッド, クラス, スーパークラス, サブクラス, 継承, クラスの抽象化, Java プログラム例

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

シェア

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

関連スライド

各ページのテキスト
1.

pi-13. 今までの総まと め トピックス:メソッド,クラス,スーパークラス, サブクラス,継承,クラスの抽象化,Java プログ ラム例 URL: https://www.kkaneko.jp/pro/pi/index.html (Java の基本,スライド資料とプログラム例) 金子邦彦 1

2.

アウトライン 番号 項目 復習 13-1 メソッド 13-2 クラス 13-3 スーパークラス、サブクラス、継承 13-4 クラスの抽象化 13-5 Java のプログラム例 各自、資料を読み返したり、課題に取り組んだりも行う この授業では、Java を用いて基礎を学び、マスターする 2

3.

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

4.

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

5.

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

6.

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

7.

13-1. メソッド 7

8.

オブジェクトとメソッド hero.moveDown() hero オブジェクト moveDown() メソッド 間を「.」で区切っている • オブジェクト コンピュータでの操作や処理の対象となるもののこと. ※ 値が変化するオブジェクトのことを変数と呼んだりもする • メソッド オブジェクトに属する操作や処理のこと 8

9.

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

10.

メソッド 100 * 1.1 a * 1.1 150 * 1.1 400 * 1.1 類似した複数の式 変数 a を使って,複数 の式を1つにまとめる (抽象化) 式「a * 1.1」を含むメソッド foo を定義し使用 10

11.

メソッド • このメソッドの本体は 「return a * 1.1;」 • このメソッドは,式「 a * 1.1」に,名前 foo を付けたものと考えることもできる 11

12.

式の抽象化とメソッド 抽象化前 類似した複数の式 実行結果 抽象化後 メソッドの定義と使用 同じ 実行結果になる 12

13.

まとめ • プログラミングでのオブジェクトは,コンピュー タでの操作や処理の対象となるもののこと • メソッドは,オブジェクトに属する操作や処理の こと • 次のメソッドは,式「 a * 1.1」に,名前 foo を付 けたものと考えることもできる • 式の抽象化とは,変数を使って,複数の式を1つ にまとめること 13

14.

演習 資料:15 ~ 16 【トピックス】 • 式の抽象化 • メソッド 14

15.

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

16.

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

17.

13-2. クラス 17

18.

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

19.

半径 1,場所(8, 10) 色 blue 円(Circle) 半径 3,場所(2, 4) 色 green 円(Circle) 19

20.

Java のオブジェクトの生成 次の2つのオブジェクトを生成する Java プログラム x 2 x 4 y 3 "green" r color y 8 x 10 1 "blue" y r color • このとき,次のクラスを使うことにする クラス名 Circle 属性 x, y, r, color コンストラクタ 20

21.

クラス定義,コンストラクタ • Java のクラス定義では,クラス名,属性名と各属 性のデータ型を指定する.メソッド定義も行う. • コンストラクタとは,オブジェクトの生成を行う メソッドのことである. 21

22.

まとめ • Java のクラス定義では,クラス名,属性名と各属 性のデータ型を指定する. • コンストラクタとは,オブジェクトの生成を行う メソッドのことである. • キーワード class クラス定義 new コンストラクタの呼び出し 22

23.

演習 資料:24 ~ 25 【トピックス】 • クラス • コンストラクタ 23

24.

① Java Tutor のエディタで次のプログラムを入れる class Circle { double x; double y; double r; String color; public Circle(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.printf("%f %f %f %s¥n", this.x, this.y, this.r, this.color); } } public class YourClassNameHere { public static void main(String[] args) { Circle x = new Circle(2, 4, 3, "green"); Circle y = new Circle(8, 10, 1, "blue"); x.printout(); y.printout(); } } 24

25.

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

26.

• プログラミングでのメソッドと は,オブジェクトに関する操作 や処理のこと メソッドと クラス • メソッドは,クラスに属する • メソッド内のプログラムは,そ のメソッドが所属するクラスの 属性やメソッドへのアクセス権 がある 26

27.

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

28.

属性アクセス x 2 x 4 y 3 "green" r color y 8 x 10 1 "blue" y r color 「オブジェクト名」+「.」で属性やメソッドにアクセスする 28

29.

メソッド内での属性アクセス メソッド内で,そのメソッドが所属するクラスで定義され た属性やメソッドにアクセスするときは this +「.」 ※ 「this」は,「メソッドが処理中のオブジェクトのこと である」とみなすことも. 29

30.

まとめ • メソッドは,クラスに属する • 「オブジェクト名」+「.」で属性やメソッドにア クセスする • メソッド内のプログラムは,そのメソッドが所属 するクラスの属性やメソッドへのアクセス権があ る • メソッド内で,そのメソッドが所属するクラスで 定義された属性やメソッドにアクセスするときは this +「.」 30

31.

13-3. スーパークラス,サブク ラス,継承 31

32.

スーパークラス,サブクラス • スーパークラス「図形 (Figure)」 • サブクラス「円 (Circle)」 「円 (Circle)」のオブジェクトは,すべて「図形 (Figure)」である 図形 (Figure) 円 (Circle) x y 図形でもあり円でもある 32

33.

継承の例 • 継承とは,スーパークラスの属性とメソッドをサブ クラスが受け継ぐこと 次のように考える • 図形 (Figure) の属性 承される → すべて,円 (Circle) に継 x, y, color • 円 (Circle) にしかない属性 r ⇒ 円の属性は x, y, color, r 33

34.

クラスの類似性 Figure 属性 Circle 属性 x x y y color color スーパークラス r 追加 サブクラス 34

35.

スーパークラス,サブクラス • サブクラスは,スーパークラスの属性とメソッドをす べて持つ • サブクラスで,スーパークラスにない属性やメソッド が追加されることがある スーパークラス クラス Figure サブクラス クラス Circle 属性 r を追加 35

36.

クラス Figure の定義 class Figure { double x; double y; String color; public Figure(double x, double y, String color) { this.x = x; this.y = y; this.color = color; } } クラス名 Figure 属性 x, y, color 36

37.

Java でのクラスの親子関係の書き方 親子関係の指定「class Circle extends Figure」 子クラスである Circle で追加される 属性,メソッドを書く コンストラクタの定義. super(x, y, color) により,親クラスの コンストラクタを呼び出していることに注意 37

38.

スーパークラス、サブクラスのためのキーワード キーワード extends スーパークラスの指定 super スーパークラスのコンストラクタの 呼び出し 38

39.

演習 資料:40 ~ 42 【トピックス】 • スーパークラス,サブクラス • 継承 39

40.

① Java Tutor のエディタで次のプログラムを入れる class Figure { double x; double y; String color; public Figure(double x, double y, String color) { this.x = x; this.y = y; this.color = color; クラス定義 } } class Circle extends Figure { double r; public Circle(double x, double y, double r, String color) { super(x, y, color); this.r = r; } public void printout() { System.out.printf("%f %f %f %s\n", this.x, this.y, this.r, this.color); クラス定義 } } 次のページに続く 40

41.

次のソースコードを入れる public class YourClassNameHere { public static void main(String[] args) { Circle x = new Circle(2, 4, 3, "green"); Circle y = new Circle(8, 10, 1, "blue"); x.printout(); y.printout(); } } 41

42.

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

43.

まとめ • クラス階層とは,複数のクラスが親子関係をなす こと • クラス①が親,クラス②が子であるとき • クラス②は,クラス①の属性とメソッドをすべて持つ • クラス②で,クラス①にない属性やメソッドが追加さ れることがある • 親子関係の指定は,「class Circle extends Figure」のように書く.Circle が子,Figure が親. • 継承とは,親クラスの属性とメソッドを子クラス が受け継ぐこと • 親クラスのことを「スーパークラス」,子クラス のことを「サブクラス」ともいう 43

44.

2つのクラスのプログラム (親子関係にしない場合) Ball Circle r の部分 が違う 全く同じ 44

45.

2つのクラスのプログラム 親子関係にしない場合とする場合の比較 Ball Ball 働きは 同じ Circle 親子関係にしない (同じようなプログラムを繰り返す) Circle 親子関係にする 45

46.

13-4. クラスの抽象化 46

47.

半径 3,場所(2, 4) 色 green 円(Circle) 幅 1, 高さ 2, 場所(6, 4) 色 black 長方形 (Rectangle) 47

48.

クラスの類似性 • 類似した2つのクラス 円 (Circle) 長方形 (Rectangle) 属性 属性 x y color r 半径 x x, y, color は 共通 y color width 幅 height 高さ 48

49.

クラス • クラスは,同じ種類のオブジェクトの集まりと考 えることができる 図形 円 (Circle) 円でもあり図形でもある 長方形 (Rectangle) 長方形でもあり図形でもある 49

50.

クラスの抽象化 円 (Circle) 長方形 (Rectangle) 図形 (Figure) 属性 属性 属性 x x x y y y color r 半径 color width color 幅 height 高さ 共通属性を持つ 50

51.

Java のオブジェクトの生成 次の2つのオブジェクトを生成する Java プログラム x 2 x 4 y "green" color 3 r a 4 y "black" color 1 2 width height 6 x 51

52.

クラス階層は何のため? • 似通ったクラス Circle, Rectangle を使いたい.プロ グラムのミスを減らすため • 将来,図形の種類を増やすときにも有効 Figure 親 子 Circle 親 子 Rectangle クラス Circle, クラス Rectangle が似ている. 共通する機能を、スーパークラス Figure にまとめる. 52

53.

演習 資料:54 ~ 56 【トピックス】 • クラスの抽象化 53

54.

① Java Tutor のエディタで次のプログラムを入れる class Figure { double x; double y; String color; public Figure(double x, double y, String color) { this.x = x; this.y = y; this.color = color; } } class Circle extends Figure { double r; public Circle(double x, double y, double r, String color) { super(x, y, color); this.r = r; } public void printout() { System.out.printf("%f %f %f %s\n", this.x, this.y, this.r, this.color); } ここまでは } 前のプログラムそのまま 次のページに続く 54

55.

続き class Rectangle extends Figure { double width; double height; public Rectangle(double x, double y, double w, double h, String color) { super(x, y, color); this.width = w; this.height = h; } クラス定義 public void printout() { System.out.printf("%f %f %f %f %s", this.x, this.y, this.width, this.height, this.color); } } public class YourClassNameHere { public static void main(String[] args) { Circle x = new Circle(2, 4, 3, "green"); Rectangle a = new Rectangle(6, 4, 1, 2, "blue"); x.printout(); a.printout(); } } 55

56.

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

57.

13-5. Java プログラム例 57

58.

配列と繰り返し 配列の 組み立て 「y[i] = x[i] * 1.1」を i の値を変えながら 5回繰り返す 58

59.

演習 資料:60 ~ 62 【トピックス】 • 配列 • 繰り返し 59

60.

① Java Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する public class YourClassNameHere { public static void main(String[] args) { double x[] = {8, 6, 4, 2, 3}; double y[] = {0, 0, 0, 0, 0}; int i; for(i=0; i<=4; i++) { y[i] = x[i] * 1.1; } for(i=0; i<=4; i++) { System.out.println(y[i]); } } } 60

61.

疑似乱数を10個作る import java.util.Random; 標準ライブラリ java.util.Random のインポート public class YourClassNameHere { public static void main(String[] args) { Random r = new Random(); int i, a; for(i=0; i<10; i++) { 疑似乱数の生成と a = r.nextInt(100); 表示を10回 System.out.println(a); 繰り返し } } } 61

62.

② Java Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する import java.util.Random; public class YourClassNameHere { public static void main(String[] args) { Random r = new Random(); int i, a; for(i=0; i<10; i++) { a = r.nextInt(100); System.out.println(a); } } } 表示を確認 0 から 99 の乱数が 10個 表示される. 62

63.

関連ページ • 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 63

64.
[beta]
13-1
public class YourClassNameHere {
public static double foo(double a) {
return a * 1.1;
}
public static void main(String[] args) {
System.out.printf("%f\n", foo(100));
System.out.printf("%f\n", foo(150));
System.out.printf("%f\n", foo(400));
}
}

64

65.
[beta]
13-2
class Circle {
double x;
double y;
double r;
String color;
public Circle(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.printf("%f %f %f %s¥n", this.x, this.y, this.r, this.color);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");
Circle y = new Circle(8, 10, 1, "blue");
x.printout();
y.printout();
}
}

65

66.
[beta]
13-3
class Figure {
double x;
double y;
String color;
public Figure(double x, double y, String color) {
this.x = x;
this.y = y;
this.color = color;
}
}
class Circle extends Figure {
double r;
public Circle(double x, double y, double r, String color) {
super(x, y, color);
this.r = r;
}
public void printout() {
System.out.printf("%f %f %f %s\n", this.x, this.y, this.r, this.color);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");
Circle y = new Circle(8, 10, 1, "blue");
x.printout();
y.printout();
}
}

66

67.
[beta]
13-4
class Figure {
double x;
double y;
String color;
public Figure(double x, double y, String color) {
this.x = x;
this.y = y;
this.color = color;
}
}
class Circle extends Figure {
double r;
public Circle(double x, double y, double r, String color) {
super(x, y, color);
this.r = r;
}
public void printout() {
System.out.printf("%f %f %f %s\n", this.x, this.y, this.r, this.color);
}
}
class Rectangle extends Figure {
double width;
double height;
public Rectangle(double x, double y, double w, double h, String color) {
super(x, y, color);
this.width = w;
this.height = h;
}
public void printout() {
System.out.printf("%f %f %f %f %s", this.x, this.y, this.width, this.height, this.color);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Circle x = new Circle(2, 4, 3, "green");
Rectangle a = new Rectangle(6, 4, 1, 2, "blue");
x.printout();
a.printout();
}
}

67

68.
[beta]
13-5
public class YourClassNameHere {
public static void main(String[] args) {
double x[] = {8, 6, 4, 2, 3};
double y[] = {0, 0, 0, 0, 0};
int i;
for(i=0; i<=4; i++) {
y[i] = x[i] * 1.1;
}
for(i=0; i<=4; i++) {
System.out.println(y[i]);
}
}
}

68

69.
[beta]
13-5 の 2つめ
import java.util.Random;
public class YourClassNameHere {
public static void main(String[] args) {
Random r = new Random();
int i, a;
for(i=0; i<10; i++) {
a = r.nextInt(100);
System.out.println(a);
}
}
}

69