オブジェクト指向における再利用のためのデザインパターン の書評です。
結論から言うと、オブジェクト指向プログラミングの学習において、『デザインパターン』をマスターするなら必修の原典です。
■ 良い点
・ とにかくデザインパターンの理解が深まる
・ 実装上の注意点や代替案が豊富
・ 各パターンのバリエーションにも言及されている
・ 結果のトレードオフ(メリット・デメリット)がよく考慮されている
・ 他のパターンとの関連の説明が深い
■ 悪い点
・ 1999年の改訂版であり内容に古い箇所が散見される
・ 所々で理解が困難な記述がある
・ C++の言語仕様に依存した説明が少々ある
■ 総評
いわずと知れた『デザインパターン』の古典的名著であり原典です。
本書を読了すれば、デザインパターンの基礎はもちろん、各パターンの実装上の注意点や、パターンを採用する際のトレードオフ、他のパターンとの関連、そしてオブジェクト指向の本質まで深いレベルでマスターすることができるでしょう。
ただ、メインの解説言語がC++ということで敬遠している人も多いのではないでしょうか。
たしかに、C++がメインですが、JavaやPHP使いにとっても、本書を学習する価値は大いにあると思います。ちなみに、高橋麻奈さんの やさしいC++ 第4版 (「やさしい」シリーズ) を使ってC++の文法の学習をした後に本書を読んだところ、重要な箇所のコードはだいたい理解できました。
また、予習として、結城氏のデザインパターン本 増補改訂版Java言語で学ぶデザインパターン入門 を読んでおくこともお勧めします。デザインパターンの学習の第一歩が本書のGoF本だと、かなりハードルが高いと思います。お勧めは、結城本と本書を交互に参照しながら読み進めることです。
つまり、やさしいC++等の書籍で言語の予習をして、結城本でデザインパターンの予習をしておくと挫折せずに読み終えることができると思います。
ただし、言語を問わず、オブジェクト指向の基礎が理解できていることが前提ですので、カプセル化、継承、ポリモーフィズム等の基礎知識は必要です。
量的には、約400ページほどで結構なボリュームがありますが、読了するとかなりの達成感と実力の向上を感じることができます。
ちなみに、本書は先頭から順に読み進める必要はなく、最初の第一章や二章が難しいと感じたなら、簡単なパターンの章から学習することが可能です。自分もTemplate MethodやStratgyなどから目を通すことで全パターンを網羅することができました。各パターンは、数ページから十数ページほどの適量に小分けされており、構成も一貫しているので、好きなパターンから負担なく読み進めることが可能です。
なお、第二章のエディタの作成の例は8つのパターンをまとめた応用的な例なので、一番最後に読むのが良いでしょう。また、第一章の概要は、『オブジェクト指向』そのものを掘り下げた良質な解説であり、他の章に劣らず、重要な章となっています。
本書の難点を言えば、やや古いことと、現在ではあまり主流でないSmallTalkについて所々で言及されていることでしょうか。また、UMLでなく、OMTというクラス図が使われているのも、最新版がでるならば修正して欲しい箇所です。これらの難点もありますが、それを遥かに上回るメリットが本書にはあるので、迷っている人は一度は手に取り、目を通すことをお勧めします。