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