サブゼミ第5回 ~分析モデル(2)~ 相互作用図 今週の内容 GOAL 相互作用図(シーケンス図とコラボレーション図を 用いて動的モデルについて議論できるようになる Objective ・相互作用図を何のために書くのかを 説明できる ・読みやすいシーケンス図が書ける ・読みやすいコラボレーション図が書ける ・シーケンス図とコラボレーション図の違い、 使い分けについて説明できる 先週の復習(オブジェクト図) 自動販売機 <<オブジェクト図>> ジュースA : 商品 コーラの在庫 : 商品在庫 ジュースB : 商品 種類A : 商品情報 ジュースC : 商品 ソーダの在庫 : 商品在庫 ジュースD : 商品 ジュースE : 商品 : 排出商品 : 取扱商品 種類B : 商品情報 クラス図で表現すると・・・ 自動販売機 <<概念モデルクラス図>> それでは・・・ 商品が売れたらどうなりますか? 自動販売機 <<オブジェクト図>> ジュースA : 商品 コーラの在庫 : 商品在庫 ジュースB : 商品 種類A : 商品情報 ジュースC : 商品 ソーダの在庫 : 商品在庫 ジュースD : 商品 ジュースE : 商品 : 排出商品 : 取扱商品 種類B : 商品情報 動的モデルをオブジェクト図で表す オブジェクト図はシステム内のオブジェクトの ある瞬間の関係(静的な関係)を切り取ったもの オブジェクト図で動的な関係を表すには たくさんの図を書かなければならない クラス図にすると・・・ ・・・同じですね クラス図はクラス同士の静的な関係を記述する クラス図とオブジェクト図ではできないこと クラス図はクラス同士の静的な関係しか記述しない オブジェクト図はオブジェクト同士の 静的な関係しか記述できない オブジェクトが実際にどのような やりとりをしているのかわからない オブジェクトのやりとりの順番がわからない そもそも本当にこれでユースケースに 対応するサービスは実現できるのか? どのようなやりとりがおこなわれているのか 商品購入の流れを図で追ってみる ジュースA : 商品 コーラの在庫 : 商品在庫 商品を在庫から出せ 種類A : 商品情報 ジュースB : 商品 ジュースC : 商品 : 取扱商品 2: 商品を出せという( ) ソーダの在庫 : 商品在庫 ジュースD : 商品 購入する 種類B : 商品情報 ジュースE : 商品 3: 商品を出す( ) 1: 購入する( ) : 排出商品 4: 商品を取り出す( ) : 購買者 排出商品に商品を出す 商品を取り出す オブジェクト図に 購買者を加える オブジェクトで考えよう “商品を出す”というメッセージが送られるのは ひとつのシナリオでしかない。 いつもすべての在庫から排出商品に メッセージが送られるわけではなく 実際は選択されたあるひとつの在庫から 排出商品にメッセージが送られる。 システム内での動的なやり取りを記述するには クラス単位ではなくオブジェクト単位で考えなければならない オブジェクト間のやり取りを記述したい 相互作用図 シーケンス図 コラボレーション図 相互作用図①<コラボレーション図> メッセージ 買いたい 商品があるか確認する <<コラボレーション図>> 3: 在庫があるか確認する( ) コーラ情報 : 商品情報 コーラ在庫 : 在庫 2: 売り切れかどうか確認する( ) 1: 取扱商品を確認する( ) : 取扱 商品 青山 : 購買者 6: 買える商品を表示する( ) 4: 売り切れかどうか確認する( ) 5: 在庫があるか確認する( ) ソーダ情報 : 商品情報 ユースケースのフローに対応 システム ソーダ在庫 : 在庫 例:ユースケース<買う>のコラボレーション図 買う <<コラボレーション図>> 17: おつりを出す( ) 10円在庫 : 貨幣在庫 : 排出貨幣 12: 売上を保管( ) 16: おつりを出せという( ) 11: おつりを計算する( ) 19: おつりを取り出す( ) : 貨幣情報 : 投入 金 1: お金を投入する( ) 14: おつりを出せという( ) 3: 投入金額を表示する( ) 青山 : 購買者 2: 金額の変更を教える( ) 13: 金額の変更を教える( ) 10: 商品が売れたことを教える( ) 7: 購入する( ) 4: 買える商品を確認する( ) コーラ情報 : 商品情報 18: 商品を取り出す( ) 6: 買える商品を表示する( ) 5: 買えるかどうかチェックする( ) : 排出 商品 : 取扱商品 8: 商品を出せという( ) 9: 商品を出す( ) コーラ在庫 : 商品在庫 見づらいですね・・・ 15: おつりの枚数を指定する( ) : 取扱貨幣 例:<買う>のコラボレーション図 買う <<コラボレーション図>> 17: おつりを出す( ) 10円在庫 : 貨幣在庫 : 排出貨幣 16: おつりを出せという( ) 12: 売上を保管( ) : 貨幣情報 19: おつりを取り出す( ) 15: おつりの枚数を指定する( ) : 取扱貨幣 11: おつりを計算する( ) 14: おつりを出せという( ) 1: お金を投入する( ) : 投入 金 青山 : 購買者 4: 買える商品を確認する( ) 3: 投入金額を表示する( ) 6: 買える商品を表示する( ) : 取扱商品 7: 購入する( ) 5: 買えるかどうかチェックする( ) 18: 商品を取り出す( ) 10: 商品が売れたこ2: 金額の変更を教える( ) とを教える( ) 13: 金額の変更を教える( ) コーラ情報 : 商品情報 8: 商品を出せという( ) コーラ在庫 : 在庫 : 排出商品 9: 商品を出す( ) それではもしおつりがなかったら? 買う <<コラボレーション図>> こんな感じでしょうか? 17: おつりを出す( ) 10円在庫 : 貨幣在庫 : 排出貨幣 16: おつりを出せという( ) 12: 売上を保管( ) : 貨幣情報 19: おつりを取り出す( ) If(おつりがあったら) 15: おつりの枚数を指定する( ) : 取扱貨幣 11: おつりを計算する( ) 14: おつりを出せという( ) 1: お金を投入する( ) : 投入 金 青山 : 購買者 4: 買える商品を確認する( ) 3: 投入金額を表示する( ) 6: 買える商品を表示する( ) : 取扱商品 7: 購入する( ) 5: 買えるかどうかチェックする( ) 18: 商品を取り出す( ) 10: 商品が売れたこ2: 金額の変更を教える( ) とを教える( ) 13: 金額の変更を教える( ) コーラ情報 : 商品情報 8: 商品を出せという( ) コーラ在庫 : 在庫 : 排出商品 9: 商品を出す( ) シナリオで考えよう コラボレーション図はあるひとつのシナリオと 対応させて書くので分岐などは記述できない 特に記述しておきたい分岐がある場合は 別にコラボレーション図を書く <買う>のコラボレーション図2 10円在庫 : 貨幣在庫 買う <<コラボレーション図>> 12: 売上を保管( ) 11: おつりを計算する( ) 1: お金を投入する( ) : 投入 金 青山 : 購買者 4: 買える商品を確認する( ) 3: 投入金額を表示する( ) 6: 買える商品を表示する( ) : 取扱商品 7: 購入する( ) 5: 買えるかどうかチェックする( ) 14: 商品を取り出す( ) コーラ情報 : 商品情報 10: 商品が売れたことを教える( ) 2: 金額の変更を教える( ) 13: 金額の変更を教える( ) 8: 商品を出せという( ) : 排出商品 コーラ在庫 : 商品在庫 9: 商品を出す( ) 自分へのメッセージ (特に重要な場合は書 く) コラボレーション図まとめ アクタとシステムのやり取り (ユースケースのフロー)を表現する オブジェクト間のメッセージのやり取りに注目する コラボレーション図はオブジェクトの配置が重要。 配置がよくないと非常に見づらくなる。 特に線の交差やメッセージ名の配置に気をつけよう。 分岐はコラボレーション図では表現できない 重要な分岐については個別に図を書く コラボレーション図ではわかりにくいこと メッセージの順番がわかりくい シーケンス図 シーケンス図とコラボレーション図は一対一対応で 共に一つのシナリオについて記述する 相互作用図②<シーケンス図> オブジェクト名 買いたい 商品があるか確認する <<シーケンス図>> : 取扱商品 コーラ情報 : 商品情報 青山 : 購買者 購買者が 取扱商品を 確認する コーラ在庫 : 在庫 ソーダ情報 : 商品情報 ソーダ在庫 : 在庫 取扱商品を確認する( ) 売り切れかどうか確認する( ) 在庫があるか確認する( ) 売り切れかどうか確認する( ) 在庫があるか確認する( ) 買える商品を表示する( ) メッセージ 活性区間 ライフライン コラボレーション図では 同じ図がコラボレーション図ではこうでした 買いたい 商品があるか確認する <<コラボレーション図>> 3: 在庫があるか確認する( ) コーラ情報 : 商品情報 コーラ在庫 : 在庫 2: 売り切れかどうか確認する( ) 1: 取扱商品を確認する( ) : 取扱 商品 青山 : 購買者 6: 買える商品を表示する( ) 4: 売り切れかどうか確認する( ) 5: 在庫があるか確認する( ) ソーダ情報 : 商品情報 ソーダ在庫 : 在庫 例:ユースケース<買う>のシーケンス図 買う <<シーケンス図>> : 投入金 : 取扱商品 コーラ情報 : 商品情報 コーラ在庫 : 在庫 : 排出商品 : 取扱貨幣 : 貨幣情報 10円在庫 : 貨 幣在庫 : 排出貨幣 青山 : 購買者 お金を投入する( ) 金額の変更を教える( ) ユーザが お金を投入する 投入金額を表示する( ) 買える商品を確認する( ) ユーザは投入金が 買いたい商品の 金額を超えたのを 確認する 買えるかどうかチェックする( ) 買える商品を表示する( ) 購入する( ) ユーザは 買いたい商品を 確定する 商品を出せという( ) 商品を出す( ) 商品が売れたことを教える( ) おつりを計算する( ) 売上を保管( ) 金額の変更を教える( ) おつりを出せという( ) おつりの枚数を指定する( ) おつりを出せという( ) おつりを出す( ) ユーザは商品を 受け取る ユーザーは おつりを受け取 る 商品を取り出す( ) おつりを取り出す( ) コラボレーション図では 同じ図がコラボレーション図ではこうでした 買う <<コラボレーション図>> 17: おつりを出す( ) 10円在庫 : 貨幣在庫 : 排出貨幣 16: おつりを出せという( ) 12: 売上を保管( ) : 貨幣情報 19: おつりを取り出す( ) 15: おつりの枚数を指定する( ) : 取扱貨幣 11: おつりを計算する( ) 14: おつりを出せという( ) 1: お金を投入する( ) : 投入 金 青山 : 購買者 4: 買える商品を確認する( ) 3: 投入金額を表示する( ) 6: 買える商品を表示する( ) : 取扱商品 7: 購入する( ) 5: 買えるかどうかチェックする( ) 18: 商品を取り出す( ) 10: 商品が売れたこ2: 金額の変更を教える( ) とを教える( ) 13: 金額の変更を教える( ) コーラ情報 : 商品情報 8: 商品を出せという( ) コーラ在庫 : 在庫 : 排出商品 9: 商品を出す( ) 相互作用図とユースケース システム 購買者 買う <<シーケンス図>> ①お金を投入する 青山 : 購買者 お金を投入する( ) ユーザが お金を投入する お金を投入する ②買いたい商品が 買えるか確認 買える商品を確認する( ) 投入金額を 表示する 買いたい商品が 買えるか確認する ユーザは投入金が 買いたい商品の 金額を超えたのを 確認する 買える商品を 表示する [ 買いたい商品が買えない ] 購入する( ) ユーザは 買いたい商品を 確定する [ 買いたい商品が買える ] 買いたい 商品を確定する 商品を出す ③買いたい商品を確定 [ おつりがある ] ④商品を取り出す おつりを出す [ おつりがない ] 商品を取り出す ユーザは商品を 受け取る ユーザーは おつりを受け取 る 商品を取り出す( ) [ おつりがある ] おつりを取り出す( ) おつりを取り出す ⑤おつりを取り出す [ おつりがない ] シーケンス図まとめ コラボレーション図とシーケンス図は 表現の仕方が違うだけで 同じ内容を表すことができる。 コラボレーション図とシーケンス図は ユースケースのフローに対応した記述ができる 規模が大きく複雑なシーケンス図は どうしても見にくくなりやすい コラボレーション図とシーケンス図の違い どちらがわかりやすいと思いますか? コラボレーション図 シーケンス図 長 所 オブジェクト間の関係が 短 所 メッセージの順番を 規模が大きいと交差が 追うのは大変 配置が難しい 書きづらい 増えて見づらくなる オブジェクト間の関係は わかりにくい わかりやすい メッセージの流れが わかりやすい 書くのが楽 状況に応じて使い分けよう! 相互作用図でわかること 買いたい 商品があるか確認する <<コラボレーション図>> 3: 在庫があるか確認する( ) コーラ情報 : 商品情報 コーラ在庫 : 在庫 2: 売り切れかどうか確認する( ) 1: 取扱商品を確認する( ) : 取扱 商品 青山 : 購買者 6: 買える商品を表示する( ) 4: 売り切れかどうか確認する( ) 5: 在庫があるか確認する( ) ソーダ情報 : 商品情報 このユースケースでは商品情報クラスのオブジェクトは 一種類のメッセージしか受け取らない ソーダ在庫 : 在庫 さらに 17: おつりを出す( ) 10円在庫 : 貨幣在庫 : 排出貨幣 16: おつりを出せという( ) 12: 売上を保管( ) : 貨幣情報 19: おつりを取り出す( ) 15: おつりの枚数を指定する( ) : 取扱貨幣 11: おつりを計算する( ) 14: おつりを出せという( ) 1: お金を投入する( ) : 投入 金 青山 : 購買者 4: 買える商品を確認する( ) 3: 投入金額を表示する( ) 6: 買える商品を表示する( ) : 取扱商品 5: 買えるかどうかチェックする( ) 7: 購入する( ) 18: 商品を取り出す( ) 10: 商品が売れたこ とを教える( ) 2: 金額の変更を教える( ) 13: 金額の変更を教える( ) コーラ情報 : 商品情報 8: 商品を出せという( ) コーラ在庫 : 在庫 : 排出商品 9: 商品を出す( ) このユースケースでは商品情報クラスのオブジェクトは 3種類のメッセージを受け取る 受け取ることができるメッセージ 前の図から“商品情報”クラスのオブジェクトは 4種類のメッセージを受け取ることができることがわかる 逆にその4種類のメッセージ以外では “商品情報”クラスにはアクセスすることができない この受信することができる メッセージのことを操作という 操作をクラス図に書く 商品情報 名前 製造会社 取扱商品 取扱商品を見る() 変更する() 買える商品を確認する() 1 0..n 金額の変更を教える() 買えるかどうか確認する() 売り切れかどうか確認する() 買えるかどうかチェックする() 購入する() +種類 1 1 実物とメタ情報 1 商品在庫 排出商品 商品を出す() 商品を取り出す() 1 1..n 商品を取り出す() 在庫があるか確認する() 在庫を補充する() 在庫を作る() 商品を出せという() 0..n 商品 製造年月日 1 0..n クラス図に操作を記述することができる Roseの使い方 シーケンス図を開いてここを選択するとコラボレーション図が生成されます 逆にコラボレーション図からシーケンス図を生成することもできます
© Copyright 2024 ExpyDoc