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

>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-11. 今までの総まとめ (Java の基本) URL: https://www.kkaneko.jp/cc/pi/index.html 金子邦彦 1

2.

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

3.

11-1. メソッド 3

4.

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

5.

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

6.

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

7.

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

8.

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

9.

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

10.

① 次のソースコードを入れる 10

11.

② 実行.実行結果を確認 11

12.

11-2. クラス 12

13.

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

14.

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

15.

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 コンストラクタ 15

16.

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

17.

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

18.

① 次のソースコードを入れる 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(); } } 18

19.

② 実行.実行結果を確認 19

20.

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

21.

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

22.

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

23.

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

24.

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

25.

11-3. スーパークラス,サブクラス,継承 25

26.

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

27.

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

28.

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

29.

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

30.

クラス 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 30

31.

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

32.

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

33.

① 次のソースコードを入れる 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); クラス定義 } } 次のページに続く 33

34.

次のソースコードを入れる 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(); } } 34

35.

② 実行.実行結果を確認 35

36.

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

37.

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

38.

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

39.

11-4. クラスの抽象化 39

40.

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

41.

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

42.

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

43.

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

44.

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

45.

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

46.

① 次のソースコードを入れる 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); } ここまでは } 前のプログラムそのまま 次のページに続く 46

47.

続き 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(); } } 47

48.

② 実行.実行結果を確認 48

49.

11-5. Java プログラム例 49

50.

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

51.

次のプログラムを実行しなさい.結果を確認しなさ い. 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]); } } } 51

52.

疑似乱数を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); 繰り返し } } } 52

53.

次のプログラムを実行しなさい.結果を確認しなさ い. 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個 表示される. 53

54.
[beta]
11-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));
}
}

54

55.
[beta]
11-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();
}
}

55

56.
[beta]
11-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();
}
}

56

57.
[beta]
11-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();
}
}

57

58.
[beta]
11-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]);
}
}
}

58

59.
[beta]
11-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);
}
}
}

59