「オブジェクト指向のこころ」 書評
みなさんこんばんは、kuwana-kbです。
前回に引き続き、今回もソフトウェア設計に関する書籍です。 今回はデザインパターンについて学びました。 「オブジェクト指向のこころ -デザインパターンとともに学ぶ-」という本です。
早速まとめていきます。
オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)
- 作者: アラン・シャロウェイ,ジェームズ・R・トロット,村上雅章
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
ざっくりと3行でいうと
- デザインパターン、オブジェクト指向設計の初心者でも大丈夫
- デザインパターンを通じてオブジェクト指向設計の原則を学べる
- ソフトウェア設計とは変更要求に強いソフトウェアを導き出すこと?
この本の紹介
この本は、デザインパターンを通じて変更に強いソフトウェアの設計を学習できる本です。 デザインパターンとは、簡単にいうとソフトウェア設計のカタログです。 繰り返し発生するソフトウェアの問題に対して、過去の開発者たちの経験から生まれた解決方法をまとめたようなものです。
本書では、パターンの解説の際にサンプルコードとしてJavaが使われています。 私はJavaを使ったことがなく、Goの経験しかありません。 Javaのサンプルコードを流し見しつつ、自分の慣れ親しんだ言語でもパターンを探してみるとより理解が深まると思います。 デザインパターンをGoで解説してくださっている方を見つけたので、Goがメインの方は参考になると思います。
デザインパターンをGoで書いてくださってるのでわかりやすいhttps://t.co/ReK0UoryEz
— kuwana-kb (@kuwana_kb_) 2019年5月8日
この本の3つのポイント
1.デザインパターン、オブジェクト指向設計の初心者でも大丈夫
本書の説明は、オブジェクト指向とはなにかから始まります。 オブジェクト指向がなぜ必要で、過去にどういう扱われ方をしたか、どう勘違いしやすいか、といった解説がなされています。
デザインパターンは、先にも説明したように「ソフトウェア設計のカタログ」のようなものですが、 その利点として、「解決策の再利用」と「共通用語の確立」が挙げられています。 特に「共通用語の確立」はエンジニアとしての会話の幅を広げてくれる可能性を持つという意味で、意外と盲点でした。
パターンを用いることでより思考の階層を引き上げられる。大工でいえば詳細な作り方を述べるより、製法のパターン(蟻溝や留め継ぎ等)で会話をした方が問題の本質にフォーカスできるようになる。
— kuwana-kb (@kuwana_kb_) 2019年5月3日
これは人が日常会話でも何気なくやってることだけど言われてみれば確かにな〜#オブジェクト指向のこころ
著者は、デザインパターンとオブジェクト指向設計は同時に学ぶことが理解の近道だといっています。 いわば一粒で二度美味しい内容です。 私は、オブジェクト指向を理解してからでないとデザインパターンを理解するのは難しいと考えていましたが、実際に読んでみると著者の言うことに一理あると感じました。 具体的には次の項目で説明したいと思います。
2.デザインパターンを通じてオブジェクト指向設計の原則を学べる
本書では多数あるデザインパターンを1つずつ解説しているのですが、デザインパターンの利点や経緯が読者にとってイメージしやすいように工夫されています。
まず、具体的なソフトウェア開発事例とその問題点の説明から始まります。 そして、オブジェクト指向設計を適用しなかった場合の解決策を示し、その後にデザインパターンによる解決策も提示した上で、比較を行っています。 この比較があることによって、そのパターンが成り立つ経緯を理解でき、有効性がわかりやすくなります。 最後に、こうしたデザインパターンの有効性からオブジェクト指向設計の原則を抽出しているのです。
「オブジェクト指向のこころ」を読み始めた。プログラムに対して要求の追加・変更があった場合の考察を丁寧に説明することで、オブジェクト指向のメリットやその活用方法を上手く説明してる。とてもわかりやすい。
— kuwana-kb (@kuwana_kb_) 2019年5月2日
本書で解説されるデザインパターンは、過去のソフトウェア開発で生じた問題から抽出した解決策のカタログであり、それ自体が有用だと私は感じました。 しかし、著者はパターンそのものよりも、パターンのアプローチとそのオブジェクト指向設計の原則こそが有効といっています。
パターンそのものが最も重要なことではない…パターンによって、特定のコンテキストにおける特定の問題についてのフォース、動機、関連を描写することができ、また、こういった関心事に取り組むためのアプローチが示される(オブジェクト指向のこころ P.345)
過去に私の周りで「デザインパターンはちょっと昔の考え方」という意見を聞いたことがあります。 パターンそのものの評価は私にはできないのですが(本書に載っているパターンよりも新しい考え方があるか存じ上げないです…)、 少なくともデザインパターンの学習を通じて設計の原則を学べる点は評価できると感じました。
タイムリーなことに、前回書評を書いた「現場で役立つシステム設計の原則」の著者である増田さんもパターンについて言及されていました。
「パターン」は、実用的な経験則を言語化したものだと思う。
— 増田 亨. (@masuda220) 2019年5月27日
参考になるが、利用には注意が必要。
「パターン」は、考えるヒントであって答えではない。
選択肢を増やし、視野を広げ、異なる視点に気づくことに価値がある。
パターンを最終解答と思い込み、そこに合わせたがるのは、ありがちな失敗。
3.ソフトウェア設計とは変更に強いソフトウェアを導き出すこと?
本書では、「変更に強い設計とは何か」について終始言及しています。 私としては、変更に強い設計も考えなきゃいけない要素の1つだよな〜くらいにしか考えていなかったので、この強調ぶりには少し驚きました。 確かに現在のビジネスの変化の速さを考えるだけでも、その重要性は明白です。 中には「一度作ったら終わり」なソフトウェアもあるかもしれませんが、事業として継続的に提供するソフトウェアは現実世界の変化の影響を避けては通れないでしょう。
そう考えるとオブジェクト指向の不向きが開発規模の大小ではなく、どれだけ要求の変化にさらされるかに寄る、という意見にも納得がいった。
— kuwana-kb (@kuwana_kb_) 2019年5月2日
今、事業をとりまく環境がめまぐるしく変わり、要求が変化するスピードも高まっていることを考えると、このパラダイムの重要性が伝わってくる。
この変更への強さは、開発者の視点で考えてみても重要な問題だと感じます。 自分の開発を振り返ってみても、既存のコンポーネントの依存関係を考慮したり、不要な結合を生じさせないように考える時間が多く、 実際にコードを書く時間自体は数分で終わってしまうことが多々あります。
デザインパターンとそこから導き出されるオブジェクト指向設計の原則は、この変更要求へ対応するための有力な考え方であると感じました。
まとめ
以上が「オブジェクト指向のこころ」の書評でした。 3点に絞ってざっくりとお伝えしましたが、中身は様々な内容について言及していて全然伝えられた気がしません。もどかしい…! 個人的には、前回読んだ設計の技術書との類似点(関心ごとの抽出など)も出てきて、少しずつ設計の世界の視野が広がっているように感じます。