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