投稿元:
レビューを見る
Gofの幾つかのデザインパターンをオブジェクト指向設計の考え方に沿って導出することでオブジェクト指向について理解を深める本。
体系だってオブジェクト指向を学んだことがなかったので,オブジェクト指向での重要な,ポリモーフィズム,カプセル化,結合度,凝集度等の概念が馴染みやすいものになったのは収穫。
これから設計を行う際の一つの指針として有効活用できる感触は得られた。
説明も適度に抽象化されており,応用可能なしっかりとした知識を得られると思う。
投稿元:
レビューを見る
一言で言うと、非常に有益な本だった。読んで良かった。
この本で語られている考え方が非常に参考になりました。
- カプセル化の考え方
- 今後の変更や追加に強いオブジェクト指向設計の方法
- どの部分をカプセル化すれば良いかの分析方法
- 具体的なデザインパターンに対する考え方
などが載っており、非常に有益な本でした。実践して血肉にしていきたい。
また、今まではデザインパターンを、「これ今回使えそうだから使ってみよう」と単純に考えていたが、この本では、
パターンが解決しようとしている問題をしっかり把握し、
自分の解決しようとしている問題と一致しているかを見極めてから使う
と書いてあり、デザインパターンに対する考え方が変わった。(今までは本質を見れていなかった。)
投稿元:
レビューを見る
■個々のデザインパターンを勉強するつもりで読み始めたが、デザインパターンの根底にある考え方を習得することができた。
■Q1. 従来のオブジェクト指向設計の限界とは?
従来のオブジェクト指向設計では、流動的要素に対して継承による特化という手法で対応していた。この手法は、必要以上の継承階層によって結合度が強まり、凝集度が低下するため、保守性と柔軟性の悪化を引き起こす。
CAD/CAMシステムの例では、フィーチャーとシステムという2種類の流動的要素に対して、フィーチャー数とシステム数を掛け合わせた数のクラスが必要になってしまう。これに対して、パターンに基づいたオブジェクト指向設計アプローチでは、流動的要素を個別のクラス内に保持(カプセル化)する。
■Q2. オブジェクトの新たな考え方とは?
従来は、データとデータを取り扱うための手続きという、実装の観点でしかオブジェクトを見ていなかった。これに対して、新たな考え方では、概念上の観点=責務に基づいてオブジェクトを捉え、責務を備えた実態として定義する。これにより、オブジェクトがどう実装されるのかではなく、何を実行するかに着目できるようになる。実装ではなく動機に着目するというのは、デザインパターンでよく出てくるスローガンである。
■Q3. カプセル化の新たな考え方とは?
従来は、カプセル化とはデータ隠蔽であると考えられていたが、これはカプセル化の限られた一面である。新たな考え方では、カプセル化とは、あらゆるものを隠蔽することである。データのほかに、実装、派生クラス、設計の詳細、実体化の規則を隠蔽することができる。派生クラスのカプセル化は、型のカプセル化とも言えるもので、抽象クラスを使用するクライアントは、派生クラスの存在を意識する必要がなくなる。
■Q4. 共通性/可変性分析とオブジェクト指向やデザインパターンの関係は?
共通性/可変性分析を用いて、オブジェクトを見つけ出す。共通性分析によって流動的要素をまとめる概念を定義し、抽象クラスを導き出す。可変性分析によって流動的要素を洗い出し、派生クラス(具象クラス)によって実装する。
☆図8.5+Fowlerの観点:
・オブジェクトの概念上の観点=責任
・オブジェクトの仕様上の観点=メソッド(振る舞い)
・オブジェクトの実装上の観点=コード、データ、演算処理
■Q5. パターンで考えるとはどういうことか?
問題領域からパターンを洗い出すことから始める(第3部の各章)。次に、洗い出したパターンの適用順序を決めて、各パターンの“canonical form”に当てはめる(第4部)。大枠から入ることによって、詳細に気を取られすぎることを回避できる。Alexanderのアプローチとも呼んでいる。
ただし、「パターンで考える」ことが有効となるケースは多くない。これに対して、共通性/可変性分析は大抵のケースで有効な方法である。
※問題領域:解決しようとしている問題そのもののこと。
■Q6. コンテキストからの設計原則とは?
コンテキストとは、あるオブジェクトが別のオブジェクトをどうやって使用するのかということ。コンテキ���トからの設計原則とは、オブジェクトにどのような要求があり、その要求に対してどのようなサービスを提供するのかという「サービス指向」を目指すことである。
コンテキストからの設計は、Alexanderの設計アプローチとも呼んでおり、以下のようなアプローチである。「パターンで考える」と同じことを言っている。
1.全体の概念を理解する。
2.パターンを洗い出す。
3.他のパターンのためのコンテキストを作り出すパターンから開始する。
4.コンテキスト内に向かって、パターンの適用と、新たなパターンの洗い出しを繰り返す
ほとんどのデザインパターンがこのアプローチに従っている。
※コンテキスト:何らかのものをその中に存在または発生させる、互いに関連しあう条件、すなわち環境や設定のこと。あるパターンは、他のパターンのためのコンテキストを提供する。
■Q7. 流動的要素のカプセル化原則とは?
流動的な振る舞いを有した派生クラスを、使用側から隠蔽すること。凝集度を高め、流動的要素間の結合度を低くするために、クラス内に複数の流動的要素を保持しないことが重要である。CAD/CAMシステムの例では、Bridge, Abstract Factory, Adaptor, Fecadeの各パターンにより、カプセル化する流動的要素を分けている。
■Q8. クラス継承よりオブジェクトの集約を多用するとはどういうことか?なぜか?
被使用側クラスの流動的要素に合わせて使用側クラスを派生(継承)させるのではなく、使用側クラスに被使用側クラスを保持させたうえで、汎用的なインタフェースを経由して呼び出すこと。被使用側クラスで流動的要素をカプセル化することにより、汎用的なインタフェースを提供できるようになる。
※Strategyパターンが一例。
■Q9. 開放/閉鎖原則とは?
ソフトウェアは変更することなく拡張できるように設計すべきという考え方。デザインパターンの根幹には開放/閉鎖原則がある。
■Q10. 共通性/可変性分析とは?
問題領域内に存在している概念(共通性)と具体的な実装(可変性)を洗い出すこと。システムの流動的要素を洗い出すことができる。以下のような、共通性/可変性分析テーブルを作りながら進める。
共通性 | 存在する流動的要素
概念1 | 具体的な実装1-A
| 具体的な実装1-B
概念2 | 具体的な実装2-A
| 具体的な実装2-B
| 具体的な実装2-C
… | …
流動的要素を洗い出した後は、デザインパターンの教訓(インタフェースを用いて設計を行い、集約を用いて流動的要素をカプセル化する)を活用できる。
デザインパターンによるアプローチ(コンテキストからの設計)とよく似ている。しかし、相互補完的な面もある。共通性/可変性分析によるアプローチは、抽象的側面の洗い出しに役立つ。デザインパターンによるアプローチは、抽象的側面間の関連に着目する。
■Q11. 分析マトリクスとは?
問題領域内に存在する流動的要素を明確にするためのテクニック。分析結果から、使用すべきパターンを洗い出すことができる。以下の表が分析マトリクスであり、概念が共通性を表し、機能が特定の共通性における流動的要素を表す���
| シナリオA | シナリオB |
概念1 | 機能1-A | 機能1-B |
概念2 | 機能2-A | 機能2-B |
… | … | … |
分析マトリクスにより、要求の抜け漏れに気づくことができる。また、数多くの特殊ケースが存在し、全体像が見えない場合の整理に有効である。
■Q12. 共通性/可変性分析と分析マトリクスの関係は?
分析マトリクスは、共通性と流動的要素の整理により、複雑な問題領域の理解に役立つ。
■Q13. 有効で汎用的な設計アプローチとは?
デザインパターンから得られた以下の教訓のこと。どのような設計にも適用可能である。これは、Alexanderのコンテキストからの設計に従ったアプローチである。
・共通性/可変性分析を用いて、システムの流動的要素を洗い出す。
・流動的要素を洗い出した後、デザインパターンの教訓(インタフェースを用いて設計を行い、集約を用いて流動的要素をカプセル化する)に従う。
投稿元:
レビューを見る
オブジェクトの本質を突いている。
マイクロサービスの設計に活用できる。
これからの三年間、実践していきたい。
投稿元:
レビューを見る
https://www.maruzen-publishing.co.jp/item/b294729.html
https://www.oreilly.com/library/view/design-patterns-explained/0321247140/
投稿元:
レビューを見る
プログラムにおける,デザインパターンとオブジェクト指向を結びつける本。「リーダブルコード」とかと並行して読むとより目的意識がもてるあ。
オブジェクト指向とは何なのかというよりかは,オブジェクト指向がどのように適用できるかを知るための本だと思う。なので基本用語については知っている前提と見たほうがよい(1,2章に説明はある)。
各論については,文章が冗長なのが欠点(?)だが実例に従っているので,個人差でわかりやすいと思う人もいるだろう。
投稿元:
レビューを見る
オブジェクト指向そのものに対して懐疑的なのだけど、それでもこの本は面白く、有用でもある。昔々オブジェクト指向について真剣に考えていたときに読みたかった。かなりバイアスがかかっているところもあるが、許容範囲内だった。
デザインパターンについては長らく誤解されているところがあった(る?)。デザインパターンを身に着けてしまえばすぐに正しい設計技法が使えるようになると勘違いな風潮が広まっていた。この本はそういう誤解を改めてくれる。確かに何もない混沌としたところからスタートするよりはずっと楽な道を歩めるようにはなる。それでも優れた設計技法を身につけるには長い時間がかかるし、本を読んだり、適当に使ってみるだけで身につくものでもない。この本はパータンの直接的な活用法よりも、むしろそういった分析の指針を与えてくれるところの一面を強調している。この点については完全に同意する。オブジェクト指向の入門書としても、パターン自体の解説書としても、ありがちなコードを提示しただけのものとは一線を画している。即効性はあまり高くなくとも良い本だった。