Presentation is loading. Please wait.

Presentation is loading. Please wait.

オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.

Similar presentations


Presentation on theme: "オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也."— Presentation transcript:

1 オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也

2 オブジェクト指向言語の基本概念 カプセル化 継承 多相性(ポリモルフィズム) データ構造とアルゴリズムの一体化 ⇒ クラス
フィールドとメソッド クラスとインスタンス 継承 多相性(ポリモルフィズム)

3 多相性とは? 継承を用いることで,既存クラスを再利用(拡張)して容易に新しいクラスを作成することができる.
しかし,作成した新しいクラスはそのままでは利用されることはない. 新しいクラスを利用するためには他のクラスも書き換えなければならない. 多相性:拡張に伴う書き換えを最小限にする仕組み. 親クラス 子クラス

4 多相性の例(1/4) Personの子クラス(Teacherクラス)をもう一つ作成.
public class Teacher extends Person { String title; // 役職 String getTitle() { return title; } void setTitle(String t) { title = t; Person クラスを 拡張して 作成する

5 多相性の例(2/4) Personにメソッドを追加. StudentおよびTeacherで そのメソッドを オーバーライド オーバーライド
public class Person { : void goToLecture(String lecture) { System.out.println(lecture + "を受講できない"); } public class Student extends Person { : void goToLecture(String lecture) { System.out.println(lecture + "を受講する"); } public class Teacher extends Person { : void goToLecture(String lecture) { System.out.println(lecture + "を講義する"); } オーバーライド

6 多相性の例(3/4) 各クラスの新しいメソッドを呼び出してみる. ここまでは,ただの継承.
public static void main(String[] args) { Person p = new Person(); Student s = new Student(); Teacher t = new Teacher(); p.goToLecture("オブジェクト指向プログラミング"); s.goToLecture("オブジェクト指向プログラミング"); t.goToLecture("オブジェクト指向プログラミング"); }

7 多相性の例(4/4) 子クラスのインスタンスを親クラスの変数に代入できる. 見た目の型は親クラス,中身は子クラスのインスタンス.
中身の型に応じてメソッドが呼び出される. public static void main(String[] args) { Person p = new Person(); Person s = new Student(); Person t = new Teacher(); p.goToLecture("オブジェクト指向プログラミング"); s.goToLecture("オブジェクト指向プログラミング"); t.goToLecture("オブジェクト指向プログラミング"); } 見た目(変数)の型をPersonに 「見た目は大人,頭脳は子供?」

8 多相性の利点(1/3) 異なる型のインスタンスをまとめて処理できる.
public static void main(String[] args) { Person p[] = new Person[3]; p[0] = new Person(); p[1] = new Student(); p[2] = new Teacher(); goToLectureTogether(p, "オブジェクト指向プログラミング"); } public static void goToLectureTogether( Person p[], String lecture) { for (int n = 0; n < p.length; n++) { p[n].goToLecture(lecture); Person型の配列 を宣言 同じ実行文で異なる型を処理できる (見た目の型はPerson)

9 多相性の利点(2/3) 新しい子クラスを作成して拡張してみると… オーバーライド
public class Staff extends Person { void goToLecture(String lecture) { System.out.println(lecture + "を見学する"); } オーバーライド

10 多相性の利点(3/3) 新しいクラスを追加してもプログラムの書き換えを最小限にできる. プログラムの書き換えは不要!
public static void main(String[] args) { Person p[] = new Person[4]; p[0] = new Person(); p[1] = new Student(); p[2] = new Teacher(); p[3] = new Staff(); goToLectureTogether(p, "オブジェクト指向プログラミング"); } public static void goToLectureTogether( Person p[], String lecture) { for (int n = 0; n < p.length; n++) { p[n].goToLecture(lecture); 新しいクラスの インスタンス プログラムの書き換えは不要!

11 多相性のまとめ 継承による拡張性,再利用性の向上をさらに推し進めるもの. 拡張した時のプログラムの書き換えを最小限にすることができる.
後に行う拡張が過去に書いたプログラムに影響を与えないようにする. 過去に書いたプログラムが未来のプログラムを呼び出すことができる. 多相性をうまく使いこなすには経験と勘が必要. オブジェクト指向設計法.


Download ppt "オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也."

Similar presentations


Ads by Google