『オブジェクトデザイン』読書メモ:第 4 章「責務」

これまでの分(第 1 〜 3 章)はこちら。

前回の章まででは、オブジェクトの「候補」を見つける方法について説明されていました。今回の第 4 章は、主に

  • 対象となる問題領域にある責務の見つけかた
  • オブジェクト候補に対する責務の割り振りかた

という話でした。重要な概念である責務についての章となります。

4 責務

4.1 責務とは何か

  • オブジェクトが担う責務とは以下のもの
    • アクションの実行
    • 情報の保持
    • 他に影響を与える判断

4.2 責務はどこから見つかるか

  • ソフトウェアに対する要求から見つける

    • ユースケースの記述
      • アクション実行、情報保持、判断実行の責務に書き換え
      • さらに制御や調整の責務を発見
    • テーマと設計ストーリー
      • 重要点に絞られた抽象的記述から責務を発見
  • オブジェクト候補の性質から見つける

    • ロールステレオタイプ
      • 情報保持役は知る責務、サービス提供役は特定のサービスを実行する責務、……
    • 内部的な性質
      • パブリックな責務に必要なプライベートな責務
    • 候補間の関連、依存関係
      • 構造化役は構造化するオブジェクトに関する責務を保持
    • ライフイベント
      • 制御役、調整役は外部的/内部的な変化、イベントに反応する責務を保持
  • その他

    • 抽象度の高い要求から推論して細かい責務を導出
    • 特定のソフトウェア環境のための技術的な責務

4.3 責務を割り当てるための戦略

  • 責務の記述
    • 抽象度の高い状態から適切な抽象度の記述へ
    • 具体的な動詞の利用
  • 大きな責務の分割
    • 他オブジェクトとコラボレート
    • ヘルパーに委譲
  • 情報と責務のまとまり
    • 保持する情報に関連する責務を割り当て
    • 関連する情報はひとつのオブジェクトに保持

4.4 オブジェクトと責務を実装する

  • 抽象的な候補オブジェクトから実装としてのクラスに変換
    • 必ずしも一対一に対応しない
    • ひとつのオブジェクトは複数のロールを持ちうる
      • 主ロール(主な目的と特徴を定義した責務からなる)
      • 副ロール(環境に適合するための責務からなる)
  • インタフェースはひとつのロールを異なるオブジェクトが演じるときに必要

  • 責務をメソッドとそのシグネチャに変換

    • インタフェースに抽象化

4.5 候補の品質を検証する

  • オブジェクトが適切か調べる方法
    • 目的に専念しているか
    • 責務が明確に定義されているか
    • 責務がそのロールに合致しているか
    • 所属地域の他のオブジェクトに価値を与えているか

参考文献

オブジェクトデザイン (Object Oriented SELECTION)

オブジェクトデザイン (Object Oriented SELECTION)