kuwana-kbの開発/学習ブログ

プログラミング、クラウドインフラのWeb開発/学習ブログ

「オブジェクト指向のこころ」 書評

みなさんこんばんは、kuwana-kbです。

前回に引き続き、今回もソフトウェア設計に関する書籍です。 今回はデザインパターンについて学びました。 「オブジェクト指向のこころ -デザインパターンとともに学ぶ-」という本です。

早速まとめていきます。

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

ざっくりと3行でいうと

この本の紹介

この本は、デザインパターンを通じて変更に強いソフトウェアの設計を学習できる本です。 デザインパターンとは、簡単にいうとソフトウェア設計のカタログです。 繰り返し発生するソフトウェアの問題に対して、過去の開発者たちの経験から生まれた解決方法をまとめたようなものです。

本書では、パターンの解説の際にサンプルコードとしてJavaが使われています。 私はJavaを使ったことがなく、Goの経験しかありません。 Javaのサンプルコードを流し見しつつ、自分の慣れ親しんだ言語でもパターンを探してみるとより理解が深まると思います。 デザインパターンをGoで解説してくださっている方を見つけたので、Goがメインの方は参考になると思います。

この本の3つのポイント

1.デザインパターンオブジェクト指向設計の初心者でも大丈夫

本書の説明は、オブジェクト指向とはなにかから始まります。 オブジェクト指向がなぜ必要で、過去にどういう扱われ方をしたか、どう勘違いしやすいか、といった解説がなされています。

デザインパターンは、先にも説明したように「ソフトウェア設計のカタログ」のようなものですが、 その利点として、「解決策の再利用」と「共通用語の確立」が挙げられています。 特に「共通用語の確立」はエンジニアとしての会話の幅を広げてくれる可能性を持つという意味で、意外と盲点でした。

著者は、デザインパターンオブジェクト指向設計は同時に学ぶことが理解の近道だといっています。 いわば一粒で二度美味しい内容です。 私は、オブジェクト指向を理解してからでないとデザインパターンを理解するのは難しいと考えていましたが、実際に読んでみると著者の言うことに一理あると感じました。 具体的には次の項目で説明したいと思います。

2.デザインパターンを通じてオブジェクト指向設計の原則を学べる

本書では多数あるデザインパターンを1つずつ解説しているのですが、デザインパターンの利点や経緯が読者にとってイメージしやすいように工夫されています。

まず、具体的なソフトウェア開発事例とその問題点の説明から始まります。 そして、オブジェクト指向設計を適用しなかった場合の解決策を示し、その後にデザインパターンによる解決策も提示した上で、比較を行っています。 この比較があることによって、そのパターンが成り立つ経緯を理解でき、有効性がわかりやすくなります。 最後に、こうしたデザインパターンの有効性からオブジェクト指向設計の原則を抽出しているのです。

本書で解説されるデザインパターンは、過去のソフトウェア開発で生じた問題から抽出した解決策のカタログであり、それ自体が有用だと私は感じました。 しかし、著者はパターンそのものよりも、パターンのアプローチとそのオブジェクト指向設計の原則こそが有効といっています。

パターンそのものが最も重要なことではない…パターンによって、特定のコンテキストにおける特定の問題についてのフォース、動機、関連を描写することができ、また、こういった関心事に取り組むためのアプローチが示される(オブジェクト指向のこころ P.345)

過去に私の周りで「デザインパターンはちょっと昔の考え方」という意見を聞いたことがあります。 パターンそのものの評価は私にはできないのですが(本書に載っているパターンよりも新しい考え方があるか存じ上げないです…)、 少なくともデザインパターンの学習を通じて設計の原則を学べる点は評価できると感じました。

イムリーなことに、前回書評を書いた「現場で役立つシステム設計の原則」の著者である増田さんもパターンについて言及されていました。

3.ソフトウェア設計とは変更に強いソフトウェアを導き出すこと?

本書では、「変更に強い設計とは何か」について終始言及しています。 私としては、変更に強い設計も考えなきゃいけない要素の1つだよな〜くらいにしか考えていなかったので、この強調ぶりには少し驚きました。 確かに現在のビジネスの変化の速さを考えるだけでも、その重要性は明白です。 中には「一度作ったら終わり」なソフトウェアもあるかもしれませんが、事業として継続的に提供するソフトウェアは現実世界の変化の影響を避けては通れないでしょう。

この変更への強さは、開発者の視点で考えてみても重要な問題だと感じます。 自分の開発を振り返ってみても、既存のコンポーネントの依存関係を考慮したり、不要な結合を生じさせないように考える時間が多く、 実際にコードを書く時間自体は数分で終わってしまうことが多々あります。

デザインパターンとそこから導き出されるオブジェクト指向設計の原則は、この変更要求へ対応するための有力な考え方であると感じました。

まとめ

以上が「オブジェクト指向のこころ」の書評でした。 3点に絞ってざっくりとお伝えしましたが、中身は様々な内容について言及していて全然伝えられた気がしません。もどかしい…! 個人的には、前回読んだ設計の技術書との類似点(関心ごとの抽出など)も出てきて、少しずつ設計の世界の視野が広がっているように感じます。

オブジェクト指向を理解したい方、デザインパターンに入門したい方はぜひ読んでみてください。