相互作用図

松尾研究室 王 興
相互作用図とは?
 4−2 シーケンス図
 4−3 シーケンス図
 4−1
 相互作用図はこのような“登場人・物”
同士のメッセージのやり取りを表現する
了解しました
6月1日の
スケジュールは?
佐藤さん
スケジュー
ル帳
田中さん
会議室
1:打ち合わせ?(6/1)
2:スケジュール?(6/1)
空いています
3:空き
4:了解
スケジュール帳
5:予約(6/1)
6月1日に打
ち合わせをし
たいのですが
田中さん
6:完了
1:打ち合わせ?(6/1)
6月1日の予約を
お願いいたします
4:了解
6:完了
5:予約(6/1)
予約完了しました
佐藤さん
田中さん
佐藤さん
会議室
会議室
3:空き
2:スケジュール?(6/1)
スケジュー
ル帳
 クラスはあくまでも概念なので、実際に
メッセージを送っているのは、この“登
場人・物”である
 メッセージの送信は“登場人・物”に対
応するクラスからオブジェクトを作成し
て、そのオブジェクトの操作を呼び出す
ことで実現する
 操作の為オブジェクトに対応するクラス
に定義しておく必要がある
 UMLの相互作用図には、2種類がある

シーケンス図
 上から下に、メッセージの流れを順番に表記する

コラボレーション図
 相互作用の参加者を中心にメッセージのやり取り
を表現する
 時系列に沿って相互作用の参加者同士の
メッセージのやり取りを表現する
 メッセージ送信の順番が分析段階で既に
明確な場合は利用しやすい
 オブジェクト間の関係(リンク)は表現し
ない
 相互作用の参加者をオブジェクトで表現
 オブジェクトの下の点線はライフライン
(生存線)と呼ぶ
 メッセージは上から下に順番に呼ばれる
 メッセージの前の番号(シーケンス番号)
省略は可能
オブジェクト
アクター1
シーケンス番号
オブジェクト1
オブジェクト2
オブジェクト3
ライフライン
(生存線)
1:メッセージ1()
2:メッセージ2()
3:メッセージ3()
メッセージ
メッセージラベル
 相互作用の参加者をライフラインで表現
する
 相互作用の参加者とその下の点線の両方
を指す
 シーケンス番号はなくなった
sdシーケンス図1
アクター1
ライフライン1
ライフライン2
ライフライン3
メッセージ1()
メッセージ2()
メッセージ3()
メッセージ
ライフライン
 クラスから生成されたものがオブジェク
トである
 オブジェクトには
オブジェクト名のみ
 オブジェクト名とそのクラス名
 クラス名のみ(無名オブジェクト)

オブジェクト名のみ
インスタントラーメン
オブジェクト名とクラス名
インスタントラーメン:商品
:商品
クラス名のみ
 オブジェクトの表記は分析・設計の進行
に伴って左から右に変化していく傾向が
ある
 最終的にはオブジェクトにはすべて対応
するクラスが割り当てられ、そのクラス
からオブジェクトが作成されるである
 分析の初期段階ではクラスとオブジェク
トが対応しない場合がある
 レンタルビデオ店
豪華客船沈没物語
 星間戦争


店員B
あるビデオテープ
豪華客船沈没物語
貸出処理をする()
店員B
星間戦争:ビデオテープ
貸出処理をする()
店員B
:ビデオテープ
貸出処理をする()
 オブジェクトの下からのびる点線として
表記する
 点線はオブジェクトが存在している期間
を示す
 点線が一番下まで引かれている場合は、
オブジェクトはそのシーケンス図の流れ
の期間中存在し続けていることを示す
:商品リスト
インスタントラーメン:商品
商品価格取得
ライフライン
(生存線)
 点線に加えて、相互作用に参加する参加
者名を記した長方形も含める
 相互作用の参加者は、オブジェクトとは
限らないので、名前に下線は引かない
 点線が下に続いているということは相互
作用の参加者が存在していることを示す
役割名
:商品リスト
ライフライン
(生存線)
インスタントラーメン:商品
商品価格取得
クラス(分類子)名
 メッセージを送る側の点線(ライフライ
ン)からメッセージを送られる側の点線
(ライフライン)に矢印を引いて表現する
 メッセージには
先端を塗りつぶした矢印
 矢印
 点線矢印

同期メッセージ
 メッセージ1

メッセージ4
ネスト(階層化)メッセージ
 メッセージ1

メッセージ2

オブジェクト1
オブジェクト2
オブジェクト3
メッセージ3
オブジェクト4
メッセージ1
メッセージ2
メッセージ3
メッセージ4
先端を
塗りつぶした矢印
 非同期メッセージ
 メッセージ1
 メッセージ3
オブジェクト1
オブジェクト2
オブジェクト3
メッセージ1
メッセージ2
メッセージ3
矢印
 先端を塗りつぶした矢印のリターンある、
新たなメッセージ呼び出しではない
 メッセージ1 〜 メッセージ3

リターン1
〜
 メッセージ4

リターン4
リターン3
オブジェク
ト1
メッセージ1
リターン1
点線矢印
オブジェク
ト3
オブジェク
ト2
オブジェク
ト4
メッセージ2
リターン2
メッセージ4
リターン4
メッセージ3
リターン3
システムの具体的な流れをオブジェクト(ラ
イフライン)同士のメッセージのやり取りで
表現する
 ユースケースのすべての流れ、つまりイベン
トフローに対応するようなシーケンス図
 ユースケースの全体の流れを表現するため

分岐
 生成/消滅
 活性区間(実行指定UML2.x)
 再帰

 分岐、生成/消滅、活性区間、再帰
オブジェクト生成
オブジェクト2
:クラス2
アクター
op0
オブジェクト1
:クラス1
op1
オブジェクト3
:クラス3
[x>0]op2
(case1)
[x<0]op2
(case2)
活性区間
オブジェクト
の消滅
op3
再帰
X
ライフライン
の分岐
 分岐、生成/消滅、実行指定、再帰
ライフライン生成
ライフライン2
:クラス2
アクター
op0
ライフライン1
:クラス1
ライフライン3
:クラス3
処理の分岐
op1
alt
[x>0]
op2
(case1)
[x<0]
op2
(case2)
実行指定
ライフライン
の消滅
op3
再帰
X
 オブジェクトの表記には
オブジェクト名のみ
 オブジェクト名とクラス名
 クラス名のみ(無名オブジェクト)

 オブジェクトに対応するクラスがどこの
パッケージに所属するかを修飾すること
も可能 オブジェクト名:パッケージ名::クラス名
インスタントラーメン:食品::商品
 活性区間(実行指定)は縦に細長い長方形
で表現する
 活性区間の上端が処理の開始時間、下端
が処理の終了時間になる
 活性区間には2つの表現がある
オブジェクト(ライフライン)がある手続き
(操作)を実行する期間
 手続き(操作)の実行とその手続きを呼び出す
側の制御の関係

「Message1()」と比較すると
「Message2()」活性区間の長さほぼ2倍、処
理時間も2倍かかる
 「foo()」の実行期間には「Message1()」
と「Message2()」の実行期間である

オブジェクト2
:クラス2
オブジェクト1
:クラス1
foo()
Message1()
R1
Message2()
実行する期間
R2
オブジェクト1
:クラス1
foo()
オブジェクト3
:クラス3
オブジェクト2
:クラス2
Message1()
Message2()
R2
Message3()
R1
R3
 制御しているオブジェクトの操作から、
制御されているオブジェクトの制御を呼
び出すことで実行可能
クラス1
+foo()
クラス2
クラス3
+Message1():R1
+Message2():R2
+Message3():R3
foo(){
R1=オブジェクト2.Message1();
}
Message1(){
R2=オブジェクト3.Message2();
R3=オブジェクト3.Message3();
}
オブジェクト1
:クラス1
foo()
オブジェクト3
:クラス3
オブジェクト2
:クラス2
Message1()
Message2()
R1
R2
Message3()
活性区間が
切れている
Message1(){
R2=オブジェクト3.Message2();
}
R3
 オブジェクトが生成される時点を表現す
るために、生成メッセージを直接オブ
ジェクトのアイコンに対して引く
 オブジェクトが消滅する時点には、X印
を記述する
UML1.x
生成
UML2.x
インスタントラー
メン:商品
このオブジェクトは
操作で生成される
生成
インスタントラー
メン:商品
このライフラインは
操作で生成される
このオブジェクトは
ここで消滅する
このライフラインは
ここで消滅する
X
X


UML1.xで、1つのオブジェクトのライフライン
(生存線)で処理が分岐する場合は、ライフライン
(生存線)も分岐する
ライフライン(生存線)の分岐は、同時に並列処理
を行うという意味ではなく、処理の流れが複数存
在していることを示す
:画面
:特別会員
[特別会員]生成()
[一般会員]生成()
:一般会員
:会員リスト
登録
(特別会員)
処理の分岐
登録
(一般会員)
ライフライン
(生存線)の分岐
 UML2.xでは処理の分岐は、結合フラグメ
ントを用いて、2つ以上の区画で別々に表
現する
:画面
alt
:特別会員
[特別会員]生成()
:一般会員
:会員リスト
登録(特別会員)
結合
フラグメント
[一般会員]生成()
処理の分岐
登録(一般会員)
 他のオブジェクトの操作を呼び出すとき
は、他のオブジェクトのライフラインの
点線に対して、メッセージを記述する
 オブジェクトが自分自身の操作を呼び出
す必要があるときは、そのオブジェクト
自身のライフラインの点線に対して、
メッセージを記述する
お客さん
:表示画面
商品一覧表示()
生成()
商品リスト
Obj
:商品リスト
商品情報の取得()
商品情報
表示()
再帰呼び出し
//表示画面の操作のイメージ
商品一覧表示(){
商品リストObj=商品リスト.生成();
//商品リストのオブジェクト生成
商品情報=商品リストObj.商品情報の取得();//「商品情報の取得」を呼ぶ
self.表示();
}
//自分の操作、「表示()」を呼ぶ
 シーケンス図のオブジェクトは、できる
だけ見やすくなるように配置する、オブ
ジェクトを登場順に左から右に配置し、
メッセージが極力左から右にいくように
する
順番を入れ替える
:リスト
1
:リスト
2
アクター1
:リスト
3
メッセージ1()
アクター1
:リスト
1
:リスト
2
:リスト
3
メッセージ1()
メッセージ2()
メッセージ2()
メッセージ3()
メッセージ3()