Transcript PPT

Chapter 4
相互作用図
FM12010 中山直飛
目次
•
•
•
•
•
•
•
1-相互作用図とは
2-シーケンス図
3-シーケンス図(-アドバンス-)
4-コラボレーション図
5-コラボレーション図(-アドバンス-)
まとめ
練習問題
1.相互作用図とは
• 前回のクラス図で表現してきたものはユー
ザ領域が静的なものだった
• 相互作用図では動的な側面について見て
いく
• オブジェクト指向のシステムでは“もの”同
士のやり取りを相互作用図で表現する
1.相互作用図とは
図:打ち合わせ日設定のメッセージのやり取り
6月1日のスケジュールは?
スケジュール帳
田中さん
空いてます
6月1日の予約をお願いします
会議室
佐藤さん
予約完了しました
佐藤さん
田中さん
スケジュール帳
会議室
1.打ち合わせ?(6/1)
2.スケジュール?(6/1)
3.空き
4.了解
5.予約(6/1)
6.完了
佐藤さん
6.完了
1.打ち合わせ?(6/1)
5.予約(6/1)
会議室
4.了解
田中さん
3.空き
2.スケジュール?(6/1)
スケジュール帳
• 相互作用図はこのような“登場人物・物”同士
のメッセージのやり取りを表現する
• クラスはあくまでも概念なので、実際にメッ
セージを送っているのはこの“登場人物・物”
です
• 相互作用図には以下の2種類が存在する
シーケンス図
コラボレーション図
2.シーケンス図
• シーケンス図は時系列に沿って相互作用の参
加者同士のメッセージのやり取りを表現する
• シーケンス図は相互作用の参加者間のメッ
セージのやり取りをライフライン(生存線)とライ
フライン間に引いた矢印、およびメッセージラ
ベルで表現します
UML1.x 図4-2-A シーケンス図
• UML1.xでは相互作用の参加者をオブジェクト
で表現
• 点線はライフライン
• メッセージは上から下へ呼ばれる
※そのためシーケンス番号は省略可
アクター1
オブジェクト1
オブジェクト2
オブジェクト3
1.メッセージ1()
2.メッセージ2()
メッセージ
シーケンス
番号
ライフライン
(生存線)
3.メッセージ3()
メッセージラベル
UML2.x 図4-2-B シーケンス図
• UML2.xでは相互作用の参加者をライフライン
で表現
• UML2.xの場合、ライフラインは相互作用の参
加者と下の点線の両方を指す
• UML2.xではシーケンス番号は消滅
sd シーケンス図1
アクター1
ライフライン1
ライフライン2
ライフライン3
メッセージ1()
ライフライン
(生存線)
メッセージ2()
メッセージ
メッセージ3()
UML1.x シーケンス図でのオブジェクト
• クラスから生成されたものがオブジェクト
• オブジェクトは図のように、左のほうから、オブジェ
クト名のみ、オブジェクト名とそのクラス名、クラス
名のみ(無名オブジェクト)で表記できる
インスタントラーメン
インスタントラーメン:商品
オブジェクト名のみ
オブジェクト名とクラス名
意味はどれも同じ
:商品
クラス名のみ
例 レンタルビデオ店
オブジェクト名の変化
星間戦争
貸出処理をする()
:ビデオテープ
星間戦争:ビデオテープ
店員B
店員B
貸出処理をする()
貸出処理をする()
店員B
• 分析が進むとオブジェクト名は意味をなさなくなるので、
オブジェクト名を表記せずにクラス名のみにすればいい。
UML1.x ライフライン(生存線)
• UML1.xではライフライン(生存線)はオブジェク
トからのびる点線として表記
• 点線はオブジェクトが存在している生存期間
を示す
:商品リスト
インスタントラーメン:商品
商品価格取得
ライフライン(生存線)
UML2.x ライフライン
• UML2.xではライフラインは点線に加えて、相
互作用に参加する参加者名を記した長方形
も含んだものになった
:商品リスト
インスタントラーメン:商品
商品価格取得
ライフライン(生存線)
シーケンス図のメッセージ
• メッセージを送る側から送られる側に矢印を
引く
• メッセージは3種類存在する
○先端を塗りつぶした矢印
同期メッセージ
○矢印
非同期メッセージ
○点線矢印
先端を塗りつぶした矢印のリターン
シーケンス図のメッセージ
• 同期メッセージ
矢印
階層化しているメッセージ
オブジェクト1
オブジェクト2
オブジェクト3
オブジェクト4
メッセージ1
メッセージ2
メッセージ3
メッセージ4
メッセージ1が終了するとメッセージ4
が呼び出される
メッセージ1の中でメッセージ2を呼び
出しメッセージ2の中でメッセージ3を
呼び出す
シーケンス図のメッセージ
• 非同期メッセージ
矢印
階層化していないメッセージ
オブジェクト1
オブジェクト2
オブジェクト3
メッセージ1
メッセージ2
メッセージ3
メッセージ1が終了しなくてもメッセージ3が呼び出される
シーケンス図のメッセージ
• リターン
矢印
オブジェクト1
オブジェクト2
オブジェクト3
オブジェクト4
メッセージ1
メッセージ2
メッセージ3
リターン2
リターン1
リターン3
メッセージ4
リターン4
3.シーケンス図-(アドバンス)• ユースケースのすべての流れ(イベントフロー)
に対応するようなシーケンス図を見ていく
• ユースケースの流れを表現するために分岐が
必要
• そのほかにも、生成/消滅、活性区間、再帰な
どを使用する
UML1.x 図4-9-A 分岐、生成/消滅、
活性区間、再帰を入れたシーケンス図
オブジェクトの生成
アクター op0
オブジェクト2
:クラス2
オブジェクト1
:クラス1
オブジェクト3
:クラス3
[x>0]op2
(case1)
op1
[x<=0]op2
(case2)
活性区間
op3
再帰
オブジェクトの消滅
ライフライン
の分岐
UML2.x 図4-9-B 分岐、生成/消滅、
実行指定、再帰を入れたシーケンス図
ライフラインの生成
アクター op0
ライフライン2
:クラス2
ライフライン1
:クラス1
ライフライン3
:クラス3
処理の分岐
op1
alt
[x>0]
op2
(case1)
[x<=0]
op2
(case2)
実行指定
op3
再帰
ライフラインの消滅
UML1.x オブジェクトの表記
(-アドバンス)
• オブジェクトの表記には、オブジェクトのみ、
オブジェクト名とそのクラス名のみ、クラス名
のみ(無名オブジェクト)
• ※シーケンスのオブジェクトのところで前述
• 表記でオブジェクトのクラスがどこのパッケー
ジに所属しているかを修飾できる
オブジェクト名:パッケージ名::クラス名
インスタントラーメン:食品::商品
パッケージ名で修飾された
オブジェクト名
UML1.x活性区間(制御フォーカス)
UML2.x実行指定(-アドバンス)
活性区間は次の2つを表現する
• オブジェクトがある手続き(操作)を実行する期間
• 手続き(操作)の実行とその手続きを呼び出す側
の制御の関係
活性区間により操作の実行する期間を表現したシーケンス図
○オブジェクトがある手続き(操作)を実行する期間
メッセージ2はメッセージ1の活性区間の長さの2倍
2倍の処理時間がかかる
オブジェクト1
:クラス1
オブジェクト2
:クラス2
foo()
Message1()
foo()の実行期間には
メッセージ1、2の実行
期間が含まれる
R1
Message2()
R2
実行する期間
活性区間により操作の制御関係を表現したシーケンス図
○手続き(操作)の実行とその手続き呼び出す側の制御の関係
オブジェクト1
:クラス1
foo()
オブジェクト1
:クラス1
オブジェクト2
:クラス2
Message1()
Message2()
foo()はR1が戻り値と
して返ってくるまでの
期間を制御
Message1()は
R2,R3が戻り値とし
て返ってくるまでの
期間を制御
R2
Message3()
R3
R1
オブジェクト、UML2.x ライフラインの
生成、消滅(アドバンス)
UML1.x オブジェクトの生成と消滅
生成
インスタントラーメン:商品
消滅
• オブジェクトが消滅する時点には、×印を記
述する
UML2.x オブジェクトの生成と消滅
生成
インスタントラーメン:商品
UML2.xでは生成のメッセージが点線になる
処理の分岐(-アドバンス)
• UML1.xでは1つのオブジェクトのライフライン
で処理が分岐する場合、ライフラインも分岐
する
• 分岐は並行処理ではなく、処理の流れが複
数存在していることを表す
UML1.x 処理の分岐の例
:画面
:特別会員
:一般会員
:会員リスト
ライフライン
の分岐
[特別会員]生成()
登録(特別会員)
[一般会員]生成()
処理の分岐
登録(一般会員)
どちらの操作も登録()で会員が登録されるが、引数が異なり、
別の操作が呼び出されるのでライフラインの分岐が必要
UML2.x 処理の分岐の例
• UML2.xでは処理の分岐は結合フラグメントを用いて、
2つ以上の区画で別々に表現する
:画面
alt
:特別会員
:一般会員
:会員リスト
[特別会員] 生成()
登録(特別会員)
結合
フラグメント
処理の分岐
[一般会員]
生成()
登録(一般会員)
再帰呼び出し(-アドバンス)
• オブジェクトが自分自身の操作を呼び出すと
きは、そのオブジェクト自身のライフラインの
点線に対して、メッセージを記述する
(再帰呼び出し)
再帰呼び出しの例
お客さん
:表示画面
商品一覧表示()
生成()
商品リストObj:商品リスト
商品情報の取得()
商品情報
表示()
再帰呼び出し
//表示画面の操作のイメージ
商品一覧表示(){
商品リストObj=商品リスト.生成():
//商品リストのオブジェクト生成
商品情報=商品リストObj.商品情報の取得(); //「商品情報の取得」を呼ぶ
self.表示(); //自分の操作、「表示()」を呼ぶ
オブジェクトの配置順
順番を入れ替える
:クラス1
:クラス3
:クラス2
:アクター
メッセージ1()
:クラス1
:クラス2
:クラス3
:アクター
メッセージ1()
メッセージ2()
メッセージ2()
メッセージ3()
メッセージ3()
• シーケンス図のオブジェクトはできるだけ見や
すいように左から順に配置する
4.コラボレーション図
–UML2.x コミュニケーション図• コラボレーション図(UML2.xではコミュニケーショ
ン図)はシーケンス図と同様、相互作用の参加者
のメッセージのやり取りを表現する
• しかし、視点が異なり、シーケンス図では上から
下に時系列にメッセージのやり取りをしていまし
たが、コラボレーション図は相互作用の参加者を
中心にメッセージのやり取りを表現する
※そのためコラボレーション図ではシーケンス番号
は必須となる
UML1.x 図4-19-A コラボレーション図
オブジェクト
1.Message1()
オブジェクト1
メッセージラベル
オブジェクト3
メッセージ
アクター1
シーケンス番号
リンク
オブジェクト2
• 相互作用の参加者をオブジェクトとして表現
• オブジェクト間にリンクと呼ばれる実戦を引き、
その上に矢印およびメッセージラベルを表記
UML2.x 図4-19-B コミュニケーション図
ライフライン
1.Message1()
ライフライン1
ライフライン3
メッセージラベル
メッセージ
アクター1
シーケンス番号
ライフライン2
• UML2.xではコラボレーション図がコミュニケー
ションズに名称変更
• UML2.xのシーケンス図と同様にオブジェクトの
代わりにライフラインを用いる
• しかし、ライフラインは長方形のみを指す
UML1.x コラボレーション図での
オブジェクト
• オブジェクトはシーケンス図と同様、オブジェ
クトのみ、オブジェクト名とそのクラス名、クラ
ス名のみで表記できる
オブジェクト名のみ
田中さん
オブジェクト名とクラス名
田中さん:会員
クラス名のみ
:会員
リンク
• リンクは2つのオブジェクト間を実線で接続する
リンク
会員リスト
会員
コラボレーション図のメッセージ
• コラボレーション図ではリンク上にメッセージを
記述する
• リンク上に記述するメッセージは次の3つがある
○先端を塗りつぶした矢印
同期メッセージ
○矢印
非同期メッセージ
○点線矢印
先端を塗りつぶした矢印のリターン
コラボレーション図のメッセージ
コラボレーション図のメッセージの例
ライフライン1
非同期
ライフライン2
ライフライン3
メッセージはメッセージラベルを付ける
先行子 ガード条件 シーケンス式 返却値
1
:=メッセージ名(引数並び)
商品情報:=表示()
シーケンス式は以下で表す
シーケンス番号 繰り返し式 :
シーケンス番号が整数なら順番を示しアルファベットが入っていたら
並行処理を表す
コラボレーション図の例
再帰メッセージ
5:選択
シーケンス番号
4:表示()
返却値
1:商品情報:=表示()
2:商品情報:=商品情報取得()
商品リスト
Webウィンドウ
お客さん
6:選択()
3:商品情報:=商品情報取得()
1のメッセージを送信すると2、3のメッ
セージが送信されWebウィンドウ
に返却値が返ってくる
4で表示され5で選択する
そのメッセージが「商品」に6の選択と
して届く
メッセージ
商品
UML1.x マルチオブジェクト
• マルチオブジェクトは複数のオブジェクトで構
成される集合体
• 同一のクラスから生成された複数のオブジェ
クトを一度に生成して表現するとき使う
マルチオブジェクト
1:会員情報取得()
店員
会員
繰り返し
先行子 ガード条件 シーケンス式 返却値
:=メッセージ名(引数並び)
1*[i=1…n]: 会員情報 :=会員情報取得(会員ID)
繰り返し
1*[i=1…n]:会員情報:=会員情報取得(会員ID)
店員
会員
5.コラボレーション図-(アドバンス)• コラボレーション図のメッセージ
先行子 ガード条件 シーケンス式 返却値
:=メッセージ名(引数並び)
2a,3a/ [ID番号>100] 1c*[i=1…n]: 会員情報 :=会員情報取得:= (会員ID)
• 先行子はこのメッセージが送信される前に送
信しておくべき他のメッセージのシーケンス番
号を示す
並列処理(-アドバンス)
• 複数のメッセージが同時に送信されていることを示す
ためにシーケンス番号の末尾にアルファベットを付け
ます。
3a*[i=1…n]:表示()
商品リスト
商品
表示
Webウィンドウ
3b*[i=1…n]:表示()
同時並行処理
イメージリスト
イメージ
先行子(-アドバンス)
• 先行子に書かれた1つ以上のシーケンス番号
をもつメッセージ送信がすべて行われるまで
は、メッセージ送信が可能にならないことを示
す。先行子はメッセージの先頭に記述する
先行子 ガード条件
2a,2a/
シーケンス式 返却値
2:
最後に/を置く
:=メッセージ名(引数並び)
:=表示()
• 商品リストとイメージリストに表示メッセージを送
信後、ボタンに表示のメッセージを送信する
3a*[i=1…n]:表示()
商品リスト
商品
1:表示()
Webウィンドウ
3b*[i=1…n]:表示()
イメージリスト
2a.2bメッセージ送信後
ボタン
イメージ
アクティブオブジェクト
• アクティブオブジェクトは制御する流れ(プロセ
スやスレッド)を1つ所有し、制御活動を開始し
て、相互作用の流れを制御するオブジェクト
社員1
アクティブオブジェクト
2b:書類のコピー
課長
社員2
1:トラブル報告
顧客
社員3
パッシブ
オブジェクト
UML1.x 仕様レベルコラボレーション図
(-アドバンス)
• 仕様レベルコラボレーション図ではオブジェク
ト同士の協調関係の中で、定義された役割
(ロール)を表現する
• /役割(ロール)名: クラス名
/買い手
: 会社
仕様レベルコラボレーション図の例
販売活動の協調関係
販売会社
/売り手:会社
売り手という役割
の会社
販売会社
/買い手:会社
買い手という役割
の会社
販売品
購入者
商品
役割名を入れたインスタンスレベルの
コラボレーション図
• インスタンスレベルのコラボレーション図に役
割名を入れたインスタンスレベルのコラボ
レーション図がある
• オブジェクト名 /役割(ロール)名: クラス名
A会社
/売り手
: 会社
役割を付けたインスタンスレベルの
コラボレーション図の例
A会社/売り手:会社
2:販売会社名取得()
1:購入()
B会社/買い手:会社
商品
相互作用参加者の比較
• UML1.xのインスタンスレベルのオブジェクトは、下線
を引き、
オブジェクト名:クラス名
と表記するが、
• 仕様レベルのオブジェクトは下線を引かず、
/役割(ロール)名:クラス名
と表記する。
• UML2.xのライフラインはUML1.xの仕様レベルのオ
ブジェクト同様に下線を引かないが、
役割(ロール)名:クラス名
と表記し、 “/” はつけない
UML1.x
インスタンスレベルのオブジェクト
オブジェクト名:クラス名
仕様レベルのオブジェクト
/役割(ロール)名:クラス名
UML2.x
ライフライン
役割(ロール)名:クラス名
まとめ1
• 登場人物・物 同士のメッセージのやり取りを
UMLでは相互作用図で表現する
• シーケンス図とコラボレーション図がある
• シーケンス図は時系列(上から下)にメッセー
ジのやり取りを表現する
• 一方、コラボレーション図はオブジェクトを中
心にメッセージの流れを表現する
まとめ2
• シーケンス図はオブジェクトの下に点線を配
置してオブジェクトの存在を表現する
• コラボレーション図ではリンクで接続し、矢印
を配置し、メッセージ名をシーケンス番号付き
で記述する
練習問題
• 問題1 以下の図について、正しい記述を選
択しなさい。
操作1()
B
A
操作2()
操作3()
C
練習問題
• ①「操作1」メッセージが終了した時点で、A、B、
Cがすべて残っている可能性がある
• ②このシーケンス図はA、B、Cは必ず一度は
生成されるということを表している
• ③×は各メッセージが失敗したことを示す
• ④長方形のアイコンの下にある、長方形は
メッセージの制御期間とメッセージの関係を
示す
• ⑤長方形のアイコンの下にある、長方形はラ
イフラインを示す
練習問題
• 問題2 シーケンス図とコミュニケーション図の特徴に関し
て適切な説明文を選択しなさい。
• ①シーケンス図は時系列に従った処理の流れを見るのに
適しているが、コミュニケーション図は、相互作用の参加
者の接続関係を見るのに適している。
• ②シーケンス図は相互作用の参加者の接続関係を見る
のに適しているが、コミュニケーション図は、時系列に従っ
た処理の流れを見るのに適している。
• ③シーケンス図は、非同期のメッセージを見るのに適して
いるが、コミュニケーション図は、時系列に従った処理の
流れを見るのに適している。
• ④シーケンス図は、時系列に従った処理の流れを見るの
に適しているが、コミュニケーション図は、オブジェクトのラ
イフサイクルを表現するのに適している。
練習問題
• 問題3 以下のシーケンス図に対応するコミュ
ニケーション図を選択しなさい。
A
B
C
op1
op2
op3
op4
練習問題
①
A
②
A
1:OP1
3:OP3
1:OP1
3:OP3
C
4:OP4
③
B
C
2:OP2
A
B
2:OP2
④
A
1:OP1
3:OP3
3:OP3
C
B
2:OP2
4:OP4
4:OP4
C
1:OP1
B
2:OP2
4:OP4
練習問題
• 問題4 先行子についての説明で適切なものを選択し
なさい。
• ①あるメッセージ送信の後に分岐するときには、それ
ぞれのメッセージのシーケンス番号を指定する。
• ②あるメッセージ送信と同時に送信すべきメッセージ
のシーケンス番号を指定する。
• ③あるメッセージ送信の後に送信すべきメッセージの
シーケンス番号を指定する。
• ④あるメッセージ送信の前に送信すべきメッセージの
シーケンス番号を指定する。
練習問題
• 問題5 この図は何を表しているか適切なも
のを選択しなさい。
:会員
•
•
•
•
•
①パート
②パッケージ
③ライフライン
④クラス
⑤コンポーネント