ソフトウエアの再利用

第三回 ソフトウエアの再利用
オブジェクト指向プログラミング(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における進化
まとめる仕組みと
してのクラスパッ
ケージ
例外、ガベージコレク
ション、型チェックの強
化、言語仕様の
退化
クラスによる部品
化、ポリモーフィズム、
継承