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