以下の問題及び回答は書籍を参考に記載しています。また一部引用があります。
第14章:デザインパターンの原則と戦略
基礎
Q1. 設計の実装方法を選択する場合、どういったことを考えるべきでしょうか?
A1.
・将来的に変化が起こる可能性
・現在のシステムを修正することが可能かどうか
・実体化するオブジェクト群の出自
・使用する言語
・データベースやコンフィグレーションファイルの利用可能性
Q2. デザインパターンには5つの落とし穴があります。それらを挙げてください。
A2.
・表層的理解:詳細レベルの状況に関する表層的な理解してにもとづき、慌ててパターンを選択してしまう。
・思い込み:パターンを信頼しすぎる。選択したパターン/モデルを用いることで全ての状況を解釈しようとする。また、こういった思い込みを正そうとしない。
・選択ミス:パターンが適切となるコンテキストや条件を理解していない(パターンという分類学的側面を理解していない)。このため、誤まったパターンを選択してします。
・誤謬:パターンの全体的知見に不慣れであるため、無知から来る誤謬が発生する。
・当てはめ:パターンの理論に適合しない部分、すなわち現実に存在する具体的な実態の例外を無視してしまう。このため、オブジェクトや個々の事物を本来あるべき姿よりも硬直化した形でモデル化してしまう危険性がある。
応用
Q1. 開放/閉鎖原則では、「モジュール、メソッド、クラスは、拡張性という観点から見た場合、見通しの利くようになっているべきであり、変更という観点から見た場合、閉鎖的になっているべきである」と述べられています。これはどういう意味でしょうか。
A1. 新たな機能を個別に、モジュール化された形で追加していけるということ。
開放:モジュールを組み合わせることで、要求が達成できるということ。
閉鎖:何かを変更する場合は、流動的要素がオブジェクト内に隠蔽されており、オブジェクト自体を変更する必要がなく、既存の実装を変更する必要がないということ。
Q2. Bridgeパターンにおける開放/閉鎖原則を説明してください。
A2. 既存のクラスに一切手を加えることなく、新たな実装を追加できる。
第15章:共通性/可変性分析
基礎
Q1. 共通性/可変性を洗い出す、2つのアプローチを答えてください。
A1.
問題領域中の2つの言葉(オブジェクト)を選択して、以下2つの観点から問う
・いずれかは、もう一方の流動的要素なのか?
・これらはいずれも、何か他のものの流動的要素なのか?
応用
Q1. 共通性/可変性分析では、共通性はそれ自体が一つの関心事に基づいているべきであると述べています。何故こういったことが重要なのでしょうか?
A1. 設計の凝集度を高めることができないため。
Q2. 共通性/可変性分析とデザインパターンは、どのように補完しあうのでしょうか?
A2.
・共通性/可変性分析は、早い段階で抽象的側面に注目することになるため、最も有益なものを見つけ出しやすくなる。(デザインパターンは、抽象的側面を洗い出す助けにならない)
・デザインパターンは、成功裏に終わった過去の設計における洞察を適用できる。(共通性/可変性分析では、こういうことはできない)
第16章:分析マトリクス
基礎
Q1. 分析マトリクスにおいて、左端の列は何を表しているでしょうか?
A1. 概念
Q2. 分析マトリクスにおいて、行は何を表しているでしょうか?
A2. 一般化された概念を実装する際における特定の方法。
Q3. 分析マトリクスにおいて、列は何を表しているでしょうか?
A3. 表現しているケースに対して使用することになる特定の実装
Q4. 分析マトリクスには、本書で解説しているどのパターンが表現されることになるのでしょうか?
A4.
行によって、Strategyパターンが、列によって、Abstract Factoryパターンが表現される。
応用
Q1. 分析マトリクスによって操作されるのは、どういったレベルの観点なのでしょうか?
A1.概念上の観点。特における流動的要素や例外。
Q2. 分析マトリクスと共通性/可変性分析は、どういった点で似ているのでしょうか?
A2. 概念上の観点を整理する点。抽象的概念(共通性)と流動的要素(可変性)を洗い出す。