【オブジェクト指向のこころ】第13章 CAD/CAMの問題をパターンによって解決する 解答

オブジェクト指向のこころ 第13章の練習問題の解答をまとめてみる。

基礎

この章で解説した,パターンを用いたソフトウェア設計の3つの手順を答えてください.
  1. パターンの洗い出し.
    • 問題領域に存在するパターンを見つけ出す
  2. パターンの分析・適用
    • パターンの並べ替え(コンテキスト生成順)
    • パターンの選択と設計の拡張
    • 追加のパターンの洗い出し
    • 繰り返し
  3. 詳細の追加
    • 必要に応じて設計に詳細を追加する.
      メソッドとクラス定義の拡張も行う.

(p.206)

コンテキストを定義してください.

何らかのものをその中に存在させる,または発生させる,互いに関連し合う条件,すなわち環境や設定のこと.

(p.207)

最年長のパターンを定義してください

システム内に存在し,他のパターンのためのコンテキストを構築する,1つまたは2つのパターンのこと. 設計にパターンを適用する際には,最年長のパターンからはじめる.

2つのパターンのうち,どちらが「年長」であるかを調べるための2つの規則を答えてください.
  • あるパターンが他のパターンの振る舞い方を定義しているか
  • 2つのパターンが互いに影響を与えあっているか

(p.210)

パターンの一般的構造を定義してください.それはいつ使用するのでしょうか?

一般的な構造とは,標準化された簡潔な表現のこと. GoF本にもともと掲載されており,Design Patterns Explainedにも載っているもの. 問題を解くときには,この一般的構造からスタートして,クラスと要素を当てはめてみることをまずオススメする.

応用

パターンを用いれば,必ず問題を定義することができるのでしょうか?できない場合,他に何が必要なのでしょうか?

答えは「必ずとは限らない」. 一般的にはパターンは問題に対する理解の仕方を教えてくれる. しかし分析自体は人間の仕事だ. これによって,我々には飯の種が残ることになる.

アナリストは問題領域において概念間の関連を洗い出すことで,他の部分を肉付けしていく必要もある. こういったことには,共通性/可変性分析を使用することができる

CAD/CAMの問題において,Abstract Factoryは「最年長」のパターンから除外されました.その理由を答えてください.

Abstract Factoryは,どんなクラスが定義されるかを知っておく必要がある. これらの情報は他のパターンによってもたらされるものである. したがって,Abstract Factoryは他のパターンに依存することになる. (他のパターンはAbstract Factoryのためのコンテキストを提供する) よって,Abstract Factoryは最年長のパターンにはなりえない.

CAD/CAMの問題において,BridgeがAdapterよりも年長であると判断された理由は何でしょうか?

明らかにBridgeとAdapterの間には関連がある. しかしAdapterのインターフェースはBridgeなしでは決められない. AdapterのインターフェースはBridgeがなければ,存在しない. AdapterはBridgeに依存するが,逆は成り立たないので,BridgeはAdapterよりも年長であるといえる.

yusuke-ujitoko.hatenablog.com