状態図 パワーポイントファイル

Download Report

Transcript 状態図 パワーポイントファイル

サブゼミ第6回
分析モデル(3)
オブジェクトの動的モデル
先週の復習<シーケンス図>
•UC<買う>のシーケンス図
買う
<<シーケンス図>>
: 投入金
: 取扱商品
コーラ情報 :
商品情報
コーラ在庫 :
商品保管庫
: 排出商品
: 取扱貨幣
: 貨幣情報
10円在庫 : 貨
幣在庫
: 排出貨幣
青山 : 購買者
お金を投入する( )
金額の変更を教える( )
ユーザが
お金を投入する
投入金額を表示する( )
買える商品を確認する( )
ユーザは投入金が
買いたい商品の
金額を超えたのを
確認する
買えるかどうかチェックする( )
買える商品を表示する( )
購入する( )
ユーザは
買いたい商品を
確定する
商品を出せという( )
商品を出す( )
商品が売れたことを教える( )
おつりを計算する( )
売上を保管( )
金額の変更を教える( )
おつりを出せという( )
おつりの枚数を指定する( )
おつりを出せという( )
おつりを出す( )
商品を取り出す( )
ユーザは商品を
受け取る
おつりを取り出す( )
ユーザーは
おつりを受け取
る
商品保管庫に関するシーケ図①
•UC<買う>在庫に関する部分のシーケンス図
買う
<<シーケンス図>>
在庫に関する部分
: 投入金
コーラ情報 :
商品情報
コーラ在庫 :
商品保管庫
: 排出商品
青山 : 購買者
購入する( )
商品を出せという( )
商品を出す( )
商品が売れたことを教える( )
商品保管庫に関するシーケ図②
•UC<買う>商品保管庫に関する部分のシーケンス図
(在庫がなかった場合のシナリオ)
買う
<<シーケンス図>>
在庫に関する部分
コーラ情報 :
商品情報
コーラ在庫 :
商品保管庫
青山 : 購買者
購入する( )
商品を出せという( )
在庫がないという( )
在庫がないことを教える( )
商品保管庫の振る舞いを比べる
①在庫を持っているとき
在庫を出せと言う
コーラ在庫:
商品保管庫
②在庫を持っていないとき
在庫を出せと言う
在庫がないと言う
コーラ在庫:
商品保管庫
在庫を出す
①と②の違い
商品保管庫が商品を持っているかによって
“商品を出せという”メッセージを受け取ったときの
商品保管庫の振る舞いが変わる
中身で考える
先週まではオブジェクトのメッセージの
やりとりについて考えていた
そのときどきによってオブジェクトがどのような
振る舞いをするのかがわからない
オブジェクトの中身について考えよう
コラボ図で中身を考える
•在庫があるとき
商品保管庫にフォーカス
<<コラボレーション図>>
ソーダ保管庫 : 商品保管庫
2: 商品を出す( )
在庫が
ある
1: 商品を出せという( )
ソーダ情報 : 商品情報
: 排出商品
コラボ図で中身を考える②
•在庫がないとき
商品保管庫にフォーカス
<<コラボレーション図>>
ソーダ保管庫 : 商品保管庫
在庫が
ない
1: 商品を出せという( )
2: 在庫がないことを教える( )
ソーダ情報 : 商品情報
コラボ図で中身を考える③
•二つ一緒に考える
商品保管庫にフォーカス
<<コラボレーション図>>
•在庫があるとき
ソーダ保管庫 : 商品保管庫
2: 商品を出す( )
在庫が
ある
1: 商品を出せという( )
•在庫がないとき
: 排出商品
在庫が
ない
3: 2:在庫がないことを教える( )
ソーダ情報 : 商品情報
•あるけど残り一つ
→在庫がなくなる
オブジェクトの動的変化
「商品を出せという」メッセージによって
ソーダ保管庫オブジェクトの中身が変わる
オブジェクトの状態が遷移するという
状態と遷移
多くのオブジェクトは複数の状態を持つ
(状態が一つしかないオブジェクトも存在する)
オブジェクトの状態はメッセージによって遷移する
(基本的には勝手に状態が遷移することはない)
どのようなメッセージでオブジェクトの
状態が遷移するのかを図で表現した
い!
状態図<在庫保管所>
商品保管場所
<<状態遷移図>>
開始状態
販売中
商品を補充する / 商品を一つ保管場所に増やす
商品を出せと言う[ 商品が2つ以上残っている ]
/ 排出商品に商品を一つ出す 遷移
在庫が
ない
在庫が
ある
商品を補充する / 商品を一つ保管場所に増やす
商品を出せと言う[ 商品がもうなかったら ] / 商品を1つ排出商品に出す
状態
イベント
アクション
ガード条件
終了状態
イベント、ガード条件、アクション
商品を出せと言う[ 商品がもうなかったら ] / 商品を1つ排出商品に出す
“商品を出せという”メッセージをイベントとして受け取り
もし“商品がなかったら”
“商品を一つ排出商品に出す”という処理を行った後
次の状態へ遷移する
状態遷移図<在庫保管所>②
商品保管場所
<<状態遷移図>>
商品を出す / 商品を1つ排出商品に出す
商品を出す / 商品を1つ排出商品に渡す
商品を出す / 商品を1つ排出商品に渡す
商品を在庫と
して3つ持つ
商品を在庫と
して2つ持つ
商品を補充する
これらは状態じゃないのですか?
商品を在庫と
して1つ持つ
商品を補充する
商品を在庫とし
て持っていない
商品を補充する
オブジェクトの状態ってなんだろ
う?
ある一瞬にオブジェクトのもつ属性が
とりうる値の組み合わせと考えることもできる
どんなオブジェクトにもある数の状態がある。
例:ソーダ商品保管庫
商品が一つもない状態~商品が満杯の状態
どの状態を図にするのか?
全ての細かな状態を記述するのはわかりにくい
システムの振る舞いに影響する
状態の遷移についてのみ知りたい
いくつかの他のオブジェクトから見ると
同じ状態として取れるような状態を
意味的にまとめて一つの状態として考えている
振る舞いと状態遷移
システムの振る舞いに影響する状態遷移
他のオブジェクトからの見方が変わったとき
(例)売り切れ→在庫あり
在庫あり→在庫満杯
自動販売機のその他の状態
自動販売機システムはどのような状態によって
振る舞いを変えるか?
商品が買えるか買えないか
在庫があるかどうか
投入金が足りているかどうか
投入金が足りているってどういうこと?
投入金が商品の価格よりも大きいかどうか
それってどのオブジェクトの状態?
1. 投入金
2. 商品情報
3. 取扱商品
<投入金>に状態を持たせる
お金を投入する[ Aだけ買えるようになる ]
何も買え
ない
さらに合計8通りの状態と
商品A 商品B 商品C
買える 買えない 買えない
”お金を投入する”、
お金を投入する[ Bだけ買えるようになる ]
商品A 商品B 商品C
買えない 買える 買えない
・・・・・
”売上を保管する”の
2種類の遷移があり
全ての場合について
商品A 商品B 商品C
買えない 買えない 買える
お金を投入する[ Cだけ買えるようになる ]
記述しなければならない
<商品情報>に状態を持たせる
金額の変更を教える[ 投入金額>=商品の価値 ]
投入金が
足りていない
投入金が
足りている
金額の変更を教える[ 投入金額<商品の価値 ]
<取扱商品>に状態を持たせる
お金を投入する[ Aだけ買えるようになる ]
何も買え
ない
商品A 商品B 商品C
買える 買えない 買えない
お金を投入する[ Bだけ買えるようになる ]
商品A 商品B 商品C
買えない 買える 買えない
商品A 商品B 商品C
買えない 買えない 買える
お金を投入する[ Cだけ買えるようになる ]
・・・・・ 投入金の場合と同じ
責任で考える
オブジェクトにはそのオブジェクトが
果たすべき責任がある
一つ一つのオブジェクトが与えられた責任を
こなすことでシステムはサービスを提供する
例:商品保管庫クラスのオブジェクト
責任・・・在庫として持っている商品の管理
<投入金>に状態を持たせる
責任
投入金
①投入された金額
②それぞれの商品が買えるかどうか
商品情報 ①商品の情報を管理
取扱商品 ①取り扱っている商品を持つ
<商品情報>に状態を持たせる
責任
投入金
①投入された金額
商品情報 ①商品の情報を管理
取扱商品 ①取り扱っている商品を持つ
<取扱商品>に状態を持たせる
責任
投入金
①投入された金額
商品情報 ①商品の情報を管理
取扱商品 ①取り扱っている商品を持つ
②それぞれの商品が買えるかどうか
わかりやすさ
状態図がわかりやすくシンプルに書けるもの
オブジェクトの責任が一つに決められるもの
シンプルでわかりやすいモデル
わかりやすいモデルはわかりやすい設計、
わかりやすい実装の基礎となる
商品保管庫(改)
商品を補充する / 商品保管庫に商品を1つ加える
商品を補充する
商品を補充する / 商品を1つ商品保管庫に加える
在庫が
ない
[ 商品があったら ]
在庫が
ある
状態??
商品を出す
[ 商品がなかったら ]
商品を出せと言う / 排出商品に商品を1つ渡す
アクテビティ図と混同しない
•まず本質的に表現したいものが違う
アクティビティ図→オブジェクト同士間のやりとり
状態図→オブジェクト内部が動的に変化する様子
•アクティビティ図はメッセージのやりとりに
重点を置いている
•状態図は状態の変化に重点をおく
まとめ
•オブジェクトには状態があり状態は遷移する
•状態にはシステムの振る舞いに影響するものがある
システムの振る舞いに影響する状態が
どのように遷移するのかを図に表す
状態図