[書評] オブジェクト指向でなぜつくるのか 第2版
同僚が読んで良かったとのことなので、自分でも読んでみた。(Amazon へのリンクは、本ページ末尾。)
対象は主に初級〜中級
基本的には初級〜中級のプログラマー向け。例えば、Ruby on Rails などのフレームワークを使ってある程度開発は出来て、クラス・インスタンスというのも何となくは分かっているが、なぜオブジェクト指向を使ってこういう形で書くのかとかがあまりピンと来ていない人には良いと思う。
自分の場合は、プログラム歴もそれなりにあって中〜上級者だとは思うが、それでも気づきとなる点などが色々とあって、読んで良かったと思う。中級以上の人であれば、知っている内容も多いので、サラッと流し読みして、1日か長くとも数日程度で読めると思う。
内容
全般
本書では、以下を(関連はするものの)別物として説明している。
- プログラミング技術としてのオブジェクト指向、つまりオブジェクト指向プログラミング(OOP)
- 「整理術」としてのオブジェクト指向、
紙面の配分も、OOPに第3〜6章の全4章を、「整理術」に関連して、UML、モデリング、オブジェクト指向設計に第8〜10章の全3章を割いている。
それ以外のトピックとしては以下の通り。
- オブジェクト指向の概説(第1〜2章)、まとめ(第12章)
- アジャイル開発とTDD(第11章)
- 関数型言語(第13章)
関数型言語の説明はおまけ程度
本書の帯には「オブジェクト指向と関数型言語の本質をズバリ解説」と書いてあるが、この第2版が出版された2011年頃は、ちょうど関数型言語が流行り始めた頃だったので、無理矢理最後の第13章に入れたのでは無いかと思われる。
とは言え、第13章は40ページ超あるので、目次・索引を含めて全365ページの本書にしてはそれなりに紙面を割いている。ただ、説明も分かりにくくは無いが、それでも駆け足感は否めない。
この章を読んで関数型言語に興味を持った人は、他の書籍などで学ぶことをオススメする。
対象読者に合わせて細かい部分を省いてたりはする
前述の通り、対象読者は恐らく初級〜中級なので、その人達向けの説明となっている。そのため、細かい部分は若干曖昧にしてたり、わかりやすさを優先するために敢えて不正確な記述をしていると思われる箇所もいくつかあった。(具体的にどこだったかは思い出せないけど数カ所はあった。)
ただ、それが悪いというわけでは無く、分かりやすくするためには良いのかなと言う印象。深く勉強したい人は他の書籍などを読めば良いので。
(蛇足)2011年の本なので少し古い記述もある
2011年に出た本なので、例として出している個別の技術などは若干古さが感じられる。Java EE 関連のデファクトスタンダードで Struts が挙げられたりとか。ただ、本書の内容には影響は及ぼさないと思う。
感想
初級〜中級にはオススメ
内容は非常に良いと思う。最初に書いた通り、「Ruby on Rails などのフレームワークを使ってある程度開発は出来て、クラス・インスタンスというのも何となくは分かっているが、なぜオブジェクト指向を使ってこういう形で書くのかとかがあまりピンと来ていない人」とかには良いと思う。
シンプルに「どう便利か」という視点が良い
プログラム関連の書籍だと結構理屈っぽいものが多いが、本書はオブジェクト指向をなるべく簡潔に本質的に説明しようとしていた。
個人的に一番良いと思ったのが、第10章のオブジェクト指向設計に関する章で、設計の目標を
- 重複を排除する
- 部品の独立性を高める
- 依存関係を循環させない
としているところ。
経験が浅いうちは MVC とか Layered Architecture とか色々考えすぎたり、デザインパターンを色々使ってみたくなったりするが、上の3原則を心がけるだけで、8割くらいのシステムは問題無く設計・プログラミング出来ると思う、というのが自分の意見。
また、「クラスの効能」に関しても、以下の3つを挙げている。これも、分かりやすい説明で良かった。
- まとめる
- 隠す
- たくさん作る
背景から説明しているのも良い
第3章で、なぜOOPが必要なのか、その背景・歴史として
機械語→アセンブリ→高級言語→構造化言語→オブジェクト指向言語
の流れを簡単に説明しているのも、「なぜOOPを使うのか」を理解するために良いと思う。
プログラミングに限らないが、仕事に関しては「なぜ」といった背景から理解した方が、仕事の理解が進み効率が良くなると思っているので、本書やそのシリーズの「なぜ」というのは良いと思う。
まとめ
初級〜中級の人にはオススメ。★4〜5くらい。中級〜上級の人に取っても、それなりに気づきがある本なのでサラッと読んでも損は無いと思う。