はじめに
本書籍はタイトルにもある通り
オブジェクト指向でなぜ作るのか?
この質問にしっかり答えることを目的にした書籍となる。
読んだ感想
プログラミングの歴史を知ることで、
オブジェクト指向で開発する必要性について理解することができた。
オブジェクト指向は構造化プログラミングの限界を打ち破ることができる技術であるということがわかった。
オブジェクト指向とは
オブジェクト指向は、モノ中心に組み上げる開発手法で、
ソフトウェアの保守や再利用をしやすくすることを重視する開発手法のこと。
オブジェクト指向で作る理由
筆者は「ソフトウェアを楽に作りたいから」と答えると言う。
オブジェクト指向が難しいと言われる理由
・専門用語が多い
→クラス、インスタンス、ポリモーフィズム、継承、オーバライド、属性…
・比喩を使った説明の方が強く印象に残ってしまう
→たい焼きの型がクラスで、たい焼きがインスタンス。
ポリモーフィズムを使うことで、吠えろ(cry)と命令すれば、犬ならワンと鳴き、猫ならニャーと鳴くよう実装できる。
・オブジェクト指向というコンセプトが抽象的。
構造化プログラミングの限界
逐次、条件分岐、繰り返しの3つの構造だけで表現する構造化プログラミングによって、
プログラムをシンプルに作成できるようになったが、
構造化プログラミングには、
「グローバル変数」と「貧弱な再利用」という二つの大きな問題を抱えていた。
グローバル変数問題
ローカル変数や値渡しの仕組みを導入したことで、情報の受け渡しを必要最小限に抑えることが可能になったが
サブルーチンの実行期間を超えて保持する必要のある情報は、グローバル変数として保持せざるを得なかった。
グローバル変数の何が問題かというと、潜在的にプログラムのどこからでも使われる可能性があること。
何かの事情でグローバル変数を変更する時には、影響範囲を確かめるためロジックを全て調べないといけない。
この問題はプログラムの規模が大きくになるにつれ深刻になる。
貧弱な再利用問題
構造化プログラミングでは、共通部品として作れるものが限定的だった。
(数値計算や文字列処理など基本的な処理(サブルーチン)を共通部品として再利用することはできた)
オブジェクト指向
上記の問題を解決するため、オブジェクト指向が登場した。
オブジェクト指向では構造化プログラミングでは存在しなかった、クラス、ポリモーフィズム、継承が追加された。
クラスは、
「まとめて、隠して、たくさん作る仕組み」を提供する。
(クラスを定義することでサブルーチンと変数を「まとめ」、他のクラスから「隠し」、インスタンスを「たくさん作る」ことができる。)
ポリモーフィズムは、
サブルーチンを呼び出す側のロジックを一本化する仕組み、すなわち共通メインルーチンを作るための仕組みを提供する。
オブジェクト指向が登場する前は共通サブルーチンはあったものの、共通メインルーチンはなかった。
フレームワークやクラスライブラリと呼ばれる大規模な再利用部品群も、ポリモーフィズムがあったからこそ可能になったとのこと。
継承は、
クラスの共通部品を別クラスにまとめる仕組みを提供する。
この仕組みを利用することで、変数とメソッドをまとめた共通クラスを作って、
別のクラスからその定義を丸ごと拝借することが可能になる。
三大要素のまとめ
オブジェクト指向以前のプログラミング言語では、共通ロジックをまとめる仕組みはサブルーチンだけだった。
そして、サブルーチンとグローバル変数が独立していたため、グローバル変数をどのサブルーチンで変更しているのか
わかりづらいことが大きな問題になっていた。
オブジェクト指向では、グローバル変数問題を解決する仕組みとしてクラスを用意した。
さらに、ポリモーフィズムと継承の仕組みを提供したことで、サブルーチンではできなかったロジックの共通化が可能になった。
おわりに
本書籍では、オブジェクト指向でなぜ作るのか?について説明するだけでなく、
プログラミングから派生した応用技術(UMLやアジャイル開発手法)についても説明されている。
私は仕事でオブジェクト指向言語を使って開発しているものの、
オブジェクト指向でなぜ作るのか、何が便利なのかは理解できていなかったので、
本書籍はとても参考になった。