『オブジェクトデザイン』読書メモ:第 4 章「責務」
これまでの分(第 1 〜 3 章)はこちら。
前回の章まででは、オブジェクトの「候補」を見つける方法について説明されていました。今回の第 4 章は、主に
- 対象となる問題領域にある責務の見つけかた
- オブジェクト候補に対する責務の割り振りかた
という話でした。重要な概念である責務についての章となります。
4 責務
4.1 責務とは何か
- オブジェクトが担う責務とは以下のもの
- アクションの実行
- 情報の保持
- 他に影響を与える判断
4.2 責務はどこから見つかるか
-
ソフトウェアに対する要求から見つける
- ユースケースの記述
- アクション実行、情報保持、判断実行の責務に書き換え
- さらに制御や調整の責務を発見
- テーマと設計ストーリー
- 重要点に絞られた抽象的記述から責務を発見
- ユースケースの記述
-
オブジェクト候補の性質から見つける
- ロールステレオタイプ
- 情報保持役は知る責務、サービス提供役は特定のサービスを実行する責務、……
- 内部的な性質
- パブリックな責務に必要なプライベートな責務
- 候補間の関連、依存関係
- 構造化役は構造化するオブジェクトに関する責務を保持
- ライフイベント
- 制御役、調整役は外部的/内部的な変化、イベントに反応する責務を保持
- ロールステレオタイプ
-
その他
- 抽象度の高い要求から推論して細かい責務を導出
- 特定のソフトウェア環境のための技術的な責務
4.3 責務を割り当てるための戦略
- 責務の記述
- 抽象度の高い状態から適切な抽象度の記述へ
- 具体的な動詞の利用
- 大きな責務の分割
- 他オブジェクトとコラボレート
- ヘルパーに委譲
- 情報と責務のまとまり
- 保持する情報に関連する責務を割り当て
- 関連する情報はひとつのオブジェクトに保持
4.4 オブジェクトと責務を実装する
-
抽象的な候補オブジェクトから実装としてのクラスに変換
- 必ずしも一対一に対応しない
- ひとつのオブジェクトは複数のロールを持ちうる
- 主ロール(主な目的と特徴を定義した責務からなる)
- 副ロール(環境に適合するための責務からなる)
-
インタフェースはひとつのロールを異なるオブジェクトが演じるときに必要
-
責務をメソッドとそのシグネチャに変換
- インタフェースに抽象化
4.5 候補の品質を検証する
- オブジェクトが適切か調べる方法
- 目的に専念しているか
- 責務が明確に定義されているか
- 責務がそのロールに合致しているか
- 所属地域の他のオブジェクトに価値を与えているか