第三回 ソフトウエアの再利用 オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」 オブジェクト指向プログラミング OOPが持つ構造化言語にはない3つの仕組み それは、 「クラス」「ポリモーフィズム」「継承」の3つ OOPの三大要素 オブジェクト指向プログラミング 三大要素1-クラスに備わる3つの仕組み クラスは「まとめて、隠して、たくさん作る」仕組み 1)サブルーチンと変数を「まとめる」 2)クラスの内部だけで使う変数やサブルーチンを 「隠す」 3)1つのクラスからインスタンスを「たくさん作る」 オブジェクト指向プログラミング 三大要素2-呼び出し側を共通化するポリ モーフィズム ポリモーフィズムは、「いろいろな形に変わ る」と言った意味をもつ。日本語では、「多 態性」「多相性」などと訳す。 オブジェクト指向プログラミング 共通サブルーチン 呼び出す側A 呼び出す側が増えて も、呼び出される側を 修正する必要ばない ポリモーフィズム 呼び出される側X 呼び出される側が増えても、 呼び出す側を修正する必要 がない。 呼び出す側A 呼び出す側A 呼び出される側 呼び出す側 呼び出される側Y 呼び出される側Z オブジェクト指向プログラミング OOPの三大要素2-ポリモーフィズム ポリモーフィズムはサブルーチンを呼び出す側の ロジックを一本化する仕組み、すなわち「共通メ インルーチン」を作る仕組みである。 オブジェクト指向プログラミング 三大要素3-クラス定義の重複を排除する継承 継承は、「似たもの同士のクラスの共通点と相違 点を整理する仕組み」 集合論の全体集合と部分集合に相当する。 オブジェクト指向プログラミング スーパークラス 継承する 継承する 継承する サブクラスA サブクラスB サブクラスC スーパークラス の 変数+メソッド スーパークラス の 変数+メソッド スーパークラス の 変数+メソッド サブクラスA 固有の 変数+メソッド サブクラスB 固有の 変数+メソッド サブクラスC 固有の 変数+メソッド サブクラスは「継承する」と宣言するだけで、スーパークラスの変数とメ ソッドをすべて定義したことになる。 オブジェクト指向プログラミング 呼び出す側 継承関係にあるサブクラ スは、すべてスーパークラ スと同じ方法で呼び出す ことができる。 スーパークラス 継承する 継承する 継承する サブクラスA サブクラスB サブクラスC スーパークラス の 変数+メソッド スーパークラス の 変数+メソッド スーパークラス の 変数+メソッド サブクラスA 固有の 変数+メソッド サブクラスB 固有の 変数+メソッド サブクラスC 固有の 変数+メソッド オブジェクト指向プログラミング OOPの三大要素3-継承 継承は、クラス定義の共通部分を別クラス にまとめることで、コードの重複を排除する 仕組みである。 オブジェクト指向プログラミング 三大要素のまとめ 三大要素 クラス ポリモーフィズ 継承 ム 説明 サブルーチンと変 数をまとめてソ フトウエア部品 を作る 整理整頓 メソッドを呼び 出す側を共通 化する 重複するクラス 定義を共通化 する 無駄を省く 無駄を省く まとめて、隠し て、たくさん作 る仕組み 共通メインルー クラスの共通部 チンを作る仕 分を別クラスに 組み まとめる仕組み 目的 覚え方 オブジェクト指向プログラミング 進化したOOPの仕組み1-パッケージ パッケージ クラス パッケージ パッケージ クラス クラス クラス クラス クラス オブジェクト指向プログラミング 進化したOOPの仕組み2-例外 エラーコード方式によるエラー処理の連鎖 サブルーチンA ①呼び出す サブルーチンB ②呼び出す A.エラーコードを判定 し、後処理を行う ④エラーコードを リターンする B.エラーコードを判定 し、後処理を行う ③エラーコードを リターンする サブルーチンC エラーを検出 問題点1 エラーコードの判定ロジックを書 き忘れても、コンパイル段階で チェックされない。 問題点2 エラーコードの判定ロジックが複 数のサブルーチンに連鎖する。 オブジェクト指向プログラミング 例外の仕組みを利用したエラー処理 サブルーチンA ①呼び出す サブルーチンB ②呼び出す A.例外の内容に応じ て後処理を行う ④例外をそのまま伝える B.例外が発生する可 能性があることを 宣言する ③例外を発生させる サブルーチンC エラーを検出 エラーを検出 メリット1 例外の宣言や後処理を書き忘 れた場合、コンパイル段階で チェックされる。 メリット2 後処理の必要がないメソッドで は例外の宣言だけをしておけば よい。 オブジェクト指向プログラミング 進化したOOPの仕組み3-ガベージコレクション ガベージコレクタは不要なインスタンスをメモリから削除 インスタンスB インスタンスA インスタンスB インスタンスC インスタンスD インスタンスE インスタンスC ガベージコレクショ ンの実行 インスタンスE オブジェクト指向プログラミング OOPの進化のまとめ 生産性向上 命令を簡単に表現 するための進化 保守性向上 高級言語までの進化 構造化言語における 進化 命令の「高級化」 による表現力の向 上 基本三構造 プログラムをわかりや すくするための進化 品質性向上 GOTOレスプログ ラミング 制約をつけて複雑さ を避けるため進化 再利用促進 重複ロジックを排除 して、部品化と再利 用を促進するための 進化 サブルーチン サブルーチンの独 立性強化 OOPにおける進化 まとめる仕組みと してのクラスパッ ケージ 例外、ガベージコレク ション、型チェックの強 化、言語仕様の 退化 クラスによる部品 化、ポリモーフィズム、 継承
© Copyright 2024 ExpyDoc