松尾研究室 王 興 相互作用図とは? 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()
© Copyright 2024 ExpyDoc