どんな本か
- 初版2004年のオブジェクト指向の定番本
- オブジェクト指向そのものについては、三大要素の紹介程度で、活用方法は深く掘り下げられていない
- そのかわり、オブジェクト指向が生まれるまでの歴史や、オブジェクト指向を活かした技術(UML、モデリングなど)の紹介、関数型プログラミングの紹介などがされている
目次
- オブジェクト指向はソフトウエア開発を楽にする技術
- オブジェクト指向と現実世界は似て非なるもの
- OOPを理解する近道はプログラミング言語の歴史にあり
- OOPは無駄を省いて整理整頓するプログラミング技術
- メモリの仕組みの理解はプログラマのたしなみ
- OOPがもたらしたソフトウエアとアイデアの再利用
- 汎用の整理術に化けたオブジェクト指向
- UMLは形のないソフトウエアを見る道具
- 現実世界とソフトウエアのギャップを埋めるモデリング
- 擬人化して役割分担させるオブジェクト指向設計
- オブジェクト指向から生まれたアジャイル開発とTDD
- オブジェクト指向を使いこなそう
歴史を学ぶと「強み」が分かる
本書によれば、【オブジェクト指向の3大要素】は、「クラス」「ポリモーフィズム」「継承」で、【進化したオブジェクト指向の仕組み】が「パッケージ」「例外」「ガベージコレクション」の3つ、です。
オブジェクト指向は、これまでのプログラミング技術の発展の中で生み出された技術ですが、僕がシステム開発に関わるようになったとき、既にこれらは当たり前になっていました。ピヨピヨのひよこプログラマだった僕は、「とりあえずクラスを定義してインスタンスを生成しとけばいいんでしょ。プログラミングってそういうもんでしょ」くらいに捉えていました。
なので、オブジェクト指向の「ありがたみ」や「意義」がいまいちピンとこない。
なぜオブジェクト指向でつくらなければならないのか。なぜポリモーフィズムだの、継承だの、わけわかんない用語を覚えて使いこなさないといけないのか。オブジェクト指向の仕組みを使ったときと使わないときとで何が違うのか。
本書では、なぜオブジェクト指向が生まれたのか、その歴史と経緯を教えてくれます。「いまさら歴史を知ったところで何になるの?」と最初は思ってましたが、技術の歴史を知ることで、「オブジェクト指向の強みや特徴」の理解が深まります。理想は実際に古い技術を使ってみることですが、時間がかかります。本なら、短時間で歴史を学ぶことができてコスパが良いですね。
実際、本書を読んでからコードの見え方が変わりました。いま携わっているプロジェクトは、レガシーコードもりもりなので、「ここは継承を使えばもっとよくなるなー」と、改善点が目につくようになりました。過去に自分が書いたコードも(汗)
オブジェクト指向の実践本ではない
本書はオブジェクト指向の実践的な知識を与えてくれるものではないので注意です。
オブジェクト指向そのものについては、3大要素+進化したオブジェクト指向の仕組みの紹介くらいだし、サンプルコードもありません。「保守性や再利用性を高める設計は、重複を排除する、部品の独立性を高める、依存関係を循環させない」と設計に関する簡単なアドバイスはありましたが、その具体例は示されていません。
より実践的な知識を得るなら、『オブジェクト指向設計実践ガイド』がおすすめです。
オブジェクト指向誕生までの歴史
最後に、簡単にオブジェクト指向が誕生するまでのプログラミング言語の歴史をメモ。
- 機械語でプログラムを書いていた
- 機械語を人間にわかりやすい記号に置き換えて表現できるアセンブリ言語の登場
- さらに人間にわかりやすい高級言語(COBOLなど)が登場
- GOTO文を廃止し、順次進行、条件分岐、繰り返しの3つの構造だけで表現する構造化言語(C言語など)の登場。合わせてローカル変数、引数を受け渡しの仕組みが考案される
- 構造化プログラミング時代の課題であった「グローバル変数問題」と「貧弱な再利用」を解決するため、オブジェクト指向言語(Java、Rubyなど)が発展する