【Clean Architecture】5章 オブジェクト指向プログラミング
「Clean Architecture」の学習記録。
「第5章 オブジェクト指向プログラミング」のまとめ。
オブジェクト指向とは何か?
オブジェクト指向(OO: Object Oriented)とは何か?
これには次の考えがある。
- データと関数の組み合わせ
- オブジェクト指向の発見以前からデータ構造を関数に渡すことは行っていた。
- 現実の世界をモデル化する方法
- これは定義が雑すぎる。
- カプセル化
- 多くのOO言語は、強制的なカプセル化を強制していない。
- 継承
- OO言語が発明される以前から継承は一般的なプラクティスだった。
- ポリモーフィズム
ポリモーフィズム
ポリモーフィズムは関数へのポインタの応用だが、関数へのポインタは危険である。
関数へのポインタは、ポインタを経由して関数を呼び出すという規約を覚える必要があったり、バグの追跡と排除が難しい。
OO言語はこうした規約を排除することで、関数へのポインタの危険性を回避した。
OOを使えばポリモーフィズムを簡単に使うことができる。
依存関係逆転
典型的な呼び出しでは、上位レベルの関数が下位レベルの関数を呼び出したとき、制御の流れと依存関係は共に 上位レベル→下位レベル となる。
ここにインタフェースを加えることで制御の流れは変わらず、依存関係が 下位レベル→上位レベル となり、依存関係が逆転する。
まとめ
「OO」とは何か?
ソフトウェアアーキテクトにとってOOとは、「ポリモーフィズムを使用することで、システムにあるすべてのソースコードの依存関係を絶対的に制御する能力」である。
これにより、アーキテクトは「プラグインアーキテクチャ」を作成できる。
これは上位レベルの方針を含んだモジュールを下位レベルの詳細を含んだモジュールから独立させることである。
下位レベルの詳細はプラグインモジュールとなり、上位レベルの方針を含んだモジュールとは独立して、デプロイおよび開発できるようになる。