chapter9

第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