カテゴリー: デザインパターン

  • 【書評】オブジェクト指向における再利用のためのデザインパターン

    オブジェクト指向における再利用のためのデザインパターン の書評です。

    結論から言うと、オブジェクト指向プログラミングの学習において、『デザインパターン』をマスターするなら必修の原典です。

    ■ 良い点
    ・ とにかくデザインパターンの理解が深まる
    ・ 実装上の注意点や代替案が豊富
    ・ 各パターンのバリエーションにも言及されている
    ・ 結果のトレードオフ(メリット・デメリット)がよく考慮されている
    ・ 他のパターンとの関連の説明が深い

    ■ 悪い点
    ・ 1999年の改訂版であり内容に古い箇所が散見される
    ・ 所々で理解が困難な記述がある
    ・ C++の言語仕様に依存した説明が少々ある

    ■ 総評
    いわずと知れた『デザインパターン』の古典的名著であり原典です。

    本書を読了すれば、デザインパターンの基礎はもちろん、各パターンの実装上の注意点や、パターンを採用する際のトレードオフ、他のパターンとの関連、そしてオブジェクト指向の本質まで深いレベルでマスターすることができるでしょう。

    ただ、メインの解説言語がC++ということで敬遠している人も多いのではないでしょうか。

    たしかに、C++がメインですが、JavaやPHP使いにとっても、本書を学習する価値は大いにあると思います。ちなみに、高橋麻奈さんの やさしいC++ 第4版 (「やさしい」シリーズ) を使ってC++の文法の学習をした後に本書を読んだところ、重要な箇所のコードはだいたい理解できました。

    また、予習として、結城氏のデザインパターン本 増補改訂版Java言語で学ぶデザインパターン入門 を読んでおくこともお勧めします。デザインパターンの学習の第一歩が本書のGoF本だと、かなりハードルが高いと思います。お勧めは、結城本と本書を交互に参照しながら読み進めることです。

    つまり、やさしいC++等の書籍で言語の予習をして、結城本でデザインパターンの予習をしておくと挫折せずに読み終えることができると思います。

    ただし、言語を問わず、オブジェクト指向の基礎が理解できていることが前提ですので、カプセル化、継承、ポリモーフィズム等の基礎知識は必要です。

    量的には、約400ページほどで結構なボリュームがありますが、読了するとかなりの達成感と実力の向上を感じることができます。

    ちなみに、本書は先頭から順に読み進める必要はなく、最初の第一章や二章が難しいと感じたなら、簡単なパターンの章から学習することが可能です。自分もTemplate MethodやStratgyなどから目を通すことで全パターンを網羅することができました。各パターンは、数ページから十数ページほどの適量に小分けされており、構成も一貫しているので、好きなパターンから負担なく読み進めることが可能です。

    なお、第二章のエディタの作成の例は8つのパターンをまとめた応用的な例なので、一番最後に読むのが良いでしょう。また、第一章の概要は、『オブジェクト指向』そのものを掘り下げた良質な解説であり、他の章に劣らず、重要な章となっています。

    本書の難点を言えば、やや古いことと、現在ではあまり主流でないSmallTalkについて所々で言及されていることでしょうか。また、UMLでなく、OMTというクラス図が使われているのも、最新版がでるならば修正して欲しい箇所です。これらの難点もありますが、それを遥かに上回るメリットが本書にはあるので、迷っている人は一度は手に取り、目を通すことをお勧めします。

    オブジェクト指向における再利用のためのデザインパターン

  • 【書評】パターン指向リファクタリング入門

    パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法 の書評です。

    結論から言うと、デザインパターンとリファクタリング、そしてテスト駆動開発を複合的に学習でき、それぞれの理解の相乗効果が得られる応用本です。

    ■ 良い点
    ・ デザインパターンとリファクタリングを複合的に学習できる
    ・ パターンとリファクタリングの相乗効果により理解が深まる
    ・ 翻訳書としては、文章が明快で読みやすい
    ・ クラス図が理解を助ける
    ・ サンプルのコード例によりJavaの勉強にもなる

    ■ 悪い点
    ・ 修正前・途中経過だけでなく、修正後のコードが欲しい
    ・ コード例が若干、難しい
    ・ 所々でわかりにくくなる箇所がある

    ■ 総評
    「パターン指向リファクタリング入門」というタイトル通り、デザインパターンとリファクタリングを複合的に解説した書籍です。リファクタリングには、テストが必須であることから、ユニットテストにも触れられていて、テスト駆動開発の理解も深まります。

    逆に言えば、本書を読みこなすには、「デザインパターン」と「リファクタリング」、そして「テスト駆動開発」の知識が前提として必要とも言えます。

    形式的には、27個のリファクタリングが取り上げられており、各10~20ページほどを要します。コード例は、5~6個ほどのサンプルを使いまわしており、本書で指定される順序で読み進めると効率よく学習できます。なお、扱われているデザインパターンは、13個ほどです。

    各節の最初にある、「要約」と「クラス図」、そして「動機」のセクションを読むと、各リファクタリングの内容がわかるようになっています。そして、「手順」と「コード例」を相互参照しながら読み進めると、理解が深まり学習効果が高まります。

    サンプルのコード例は、欧米文化的なものなので、最初は取っ付きにくく、しんどいですが、使いまわしのためJavaの学習と割り切って取り組むと実力がつくと思います。

    全体を通して、パターンを採用する際に、メリットとデメリットを比較衡量するので、トレードオフの感覚が掴めることが役に立ちます。また、Compositeパターン等の重要なパターンが複数回取り上げられるので、重要パターンの理解が深まります。ちなみに、Interpreterパターンの使いどころが、本書の解説を読みやっと理解ができました。

    デザインパターンを使って、より良いコーディングがしたいというプログラマにお勧めの一冊です。

    パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法

  • 【書評】PHPによるデザインパターン入門

    PHPによるデザインパターン入門 [下岡 秀幸 著]の書評です。

    結論から言うと、PHPを用いて、デザインパターンを詳しく丁寧に解説した貴重な一冊。

    ■ 良い点
    ・ GoFの23パターンをすべて詳細に解説
    ・ PHP用にサンプルがカスタマイズされている
    ・ UMLに対応
    ・ PHP5.2に対応している
    ・ 構成が一貫している
    ・ オブジェクト指向プログラミング力が向上する

    ■ 悪い点
    ・ 誤字が多い

    ■ 総評

    PHP言語でデザインパターンを解説している貴重な一冊です。Javaによるデザインパターン本は比較的多いのですが、PHPではこの本くらいしか見当たりません。

    出版年は2006年と古いものの、PHP5.2には対応しており、内容的にそれほど古さを感じさせないものとなっています。そのため、現在でも、十分通用すると思います。

    内容的には、GoFの23パターンすべてを詳細に解説しており、本書を一通り読めば、デザインパターンの理解が深まります。また、サンプルコードを通して学習することで、オブジェクト指向プログラミングそのものの理解も深まります。OOPに興味が有るPHPerなら是非とも読んでおきたい書籍です。UMLの簡易説明もあるので、無理なく学習できると思います。

    個人的には、結城本では理解できなかったインタープリター・パターンを理解できたのが良かったです。

    もっとも、完全なオブジェクト指向言語であるJavaによるデザインパターンとは異なり、若干、PHPならではの修正がある部分もあります。PHPでは、型がゆるいので仕方ないのですが。

    本書の難点を一つだけ言うならば、誤字が多いことです。ところどころで間違いがあります。文脈から誤りは分かるので、自分で修正しながら読めばいいのですが、この点はやはりマイナスポイントです。

    PHPによるデザインパターン入門

  • 【書評】Javaデザインパターン徹底攻略

    Javaデザインパターン徹底攻略 の書評です。

    結論からいうと、デザインパターンの解説が、コンパクトに上手くまとまっている一冊です。

    ■ 良い点
    ・ パターンのエッセンスに重点がおかれている
    ・ コンパクトでページ数が少ない
    ・ 図解がわかりやすい
    ・ 構成が一貫している

    ■ 悪い点
    ・ 句読点がカンマとピリオド
    ・ 均等な解説なため重要度がわからない

    ■ 総評

    GoFのデザインパターン全23種類をコンパクトに解説した良書です。各パターンの解説が10ページ前後に抑えられているため、学習の負担が少なくてすみます。

    また、サンプルのコードも易しいものが多いのでJavaの初心者に敷居が低い一冊となっています。ちなみに、巻末には、Javaの基礎として、継承やポリモーフィズム等の解説があるので、理解を助けます。

    他の本との比較で言えば、 かの有名な結城本は、詳細で分厚い書籍ですが、こちらは、簡易説明でページ数が少ない一回り小さ目の書籍であるのが特徴といえます。

    ページ数が少ないといっても、内容的にはポイントを押さえた分かり易いものとなっています。そのため、エッセンスが詰まっている印象を受けます。

    また、各デザインパターンの「目的、効果、背景、使用例、注意」といった順の一貫した構成になっているので、混乱なく読み進めることができます。

    クラス図についていえば、UMLを採用せず、この本独自の図解となっているので、少し残念なのですが、この独自の図解もなかなか分かりやすいので、「これもありかな」と納得できます。

    この本だけでは、デザインパターンの全てを理解することはできませんが、短期間にデザインパターンの概要を知りたい人や、二冊目の復習用に最適な一冊です。

    Javaデザインパターン徹底攻略

  • 【書評】増補改訂版Java言語で学ぶデザインパターン入門

    増補改訂版Java言語で学ぶデザインパターン入門 [結城浩 著]の書評です。

    結論から言うと、難しいと思われがちなデザインパターンを易しく丁寧にかつ詳しく解説した良書です。

    ■ 良い点
    ・ GoFの全23パターンが丁寧かつ易しく解説されている
    ・ 各パターンが15ページほどで適切な文章量に収まっている
    ・ サンプルコードが易しく分かりやすい
    ・ サンプルのクラス図及びパターンのクラス図が分かりやすい
    ・ パターン同士の関連に言及されている
    ・ 文章が読みやすく比喩の例えがよい
    ・ オブジェクト指向プログラミングの理解が深まる
    ・ 練習問題の解説が約100ページと充実

    ■ 悪い点
    ・ 均等な解説のためどのパターンが重要かが分からない

    ■ 総評

    デザインパターン界隈では、結城本と呼ばれ、名著とされている一冊です。

    言語はJavaで書かれていますが、基本的な文法を理解している人なら、ほぼすべてのサンプルコードを読み解けます。また、UMLを使ったクラス図を用いた解説がありますが、UML自体の簡易説明もあるので初心者には嬉しい配慮がされています。

    また、オブジェクト指向の理解を深めるための解説が、随所に散りばめられており、プログラミングの基礎力の向上も期待できる内容となっています。

    オブジェクト指向とデザインパターンに興味がある人なら是非読んでおきたい一冊です。

    ただ、GoFの全23パターンが均等に解説されているため、どのパターンがより重要かは分かり辛くなっています。もっとも、自分の保守するコードを思い浮かべながら読むと、自分が活用できそうなパターンも見えてくるので、そういった点を想像しながら読むといいと思います。

    増補改訂版Java言語で学ぶデザインパターン入門