サブゼミ第5回

サブゼミ第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の使い方
シーケンス図を開いてここを選択するとコラボレーション図が生成されます
逆にコラボレーション図からシーケンス図を生成することもできます