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

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
アルゴリズムとプログラミング (Algorithms and Programming)
社会人学習講座 「Javaプログラミング概論」
JavaBeans とJSP データベース論 第5回.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
ソフトウェア制作論 平成30年11月21日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
サブゼミ第7回 実装編① オブジェクト型とキャスト.
ソフトウェア制作論 平成30年11月28日.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

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

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

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

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

多相性の例(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 + "を講義する"); } オーバーライド

多相性の例(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("オブジェクト指向プログラミング"); }

多相性の例(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に 「見た目は大人,頭脳は子供?」

多相性の利点(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)

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

多相性の利点(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); 新しいクラスの インスタンス プログラムの書き換えは不要!

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