第9章 オブジェクトの構築 日下部研究室 修士2年 秋本 浩平
オブジェクトの相互関係 継承 コンポジション 関連 集約
継承とコンポジション 継承 is-a関係 特性を引き継ぐ コンポジション has-a関係 複数の特性をまとめる
コンポジション システムをサブシステムに分割 コンポジションと安定したシステムの関係 独立したサブシステムによる集約 サブシステムは関連によって結ばれる サブシステムも集約されたシステムである コンポジションと安定したシステムの関係
安定したシステム 階層構造を成す サブシステムは独立している サブシステムの大きさは適切である 安定したシステムは単純なものから進化する 単純なサブシステムでシステムを構成 サブシステムは独立している サブシステム間とサブシステム内部の対話が明らかである サブシステムの大きさは適切である 大きすぎても小さすぎてもいけない 安定したシステムは単純なものから進化する 既存のものを利用
よく分割されたシステム AVシステム 独立したサブシステムを組み合わせて AVシステムを構成 D社製品 CDプレイヤー D社製品 ヘッドホン D社製品 DVDプレイヤー D社製品 アンプ D社製品 5.1chスピーカー M社製品 PDP 独立したサブシステムを組み合わせて AVシステムを構成
よく分割されたシステム AVシステム サブシステム単位で交換可能 D社製品 CDプレイヤー D社製品 ヘッドホン D社製品 DVDプレイヤー B社製品 5.1chスピーカー M社製品 PDP サブシステム単位で交換可能
よく分割されたシステム AVシステム 規格に従っていれば 同じ会社(開発者)である必要はない O社製品 CDプレイヤー A社製品 ヘッドホン M社製品 HDD&DVDレコーダー P社製品 アンプ B社製品 5.1chスピーカー S社製品 HDプロジェクタ 規格に従っていれば 同じ会社(開発者)である必要はない
AVシステムのクラス図 AVシステムは多数の独立した オブジェクトで構成されている ⇒集約 ケーブルで接続し作業を分担する ⇒関連
依存関係 コンポジションによるシステムの分割 オブジェクトが互いに強く依存しないことが望ましい 領域の異なるオブジェクトは混ぜないほうが安定する 領域を重ねると便利なことがある
領域の重複 ー安定性を重視ー + 予約録画するとき、チューナとレコーダ 両方の設定が必要 片方が壊れてももう片方はつかえる 高い HDD&DVDレコーダ CSチューナ 予約録画するとき、チューナとレコーダ 両方の設定が必要 片方が壊れてももう片方はつかえる 高い スペースが必要
領域の重複 ー利便性を重視ー 予約録画が簡単 片方の機能が壊れても簡単に交換できない 部品の共通化が出来るので安い 省スペース CSチューナ内蔵 HDD&DVDレコーダ 予約録画が簡単 片方の機能が壊れても簡単に交換できない 部品の共通化が出来るので安い 省スペース
多重度 関連に参加するオブジェクトの数を指定 任意か必須か 数の制限はあるか 関連 多重度 任意/必須 従業員/部門 1 必須 従業員/職務明細 1...* 従業員/配偶者 0...1 任意 従業員/子供 0...*
多重度の例 関連 多重度 任意/必須 従業員/部門 1 必須 従業員/職務明細 1...* 従業員/配偶者 0...1 任意 従業員/子供 0...*
実装での表現(1) 数の表現(1:nの関連) 配列による実装 理論上では無限でも設計では十分大きな有限数とすることもある public class Employee extends Person{ : private Spouse spouse; private Child[] child; private Division division; private JobDescription[] jobDescription; }
実装での表現(2) 任意の関連 関連が0(null)であるかを確認するように 実装する必要がある
クラスの例