Index: [Article Count Order] [Thread]

Date:  Thu, 06 May 2004 10:09:22 +0900
From:  ***************@********.**.** (児玉公信)
Subject:  [oosquare-ml:04279] Re: 「 ATM の整備員は故障中の ATM を修理する」をどうあらわす?
To:  ***********@***.***.*******.**.**
Message-Id:  <************.*******@******.********.**.**>
In-Reply-To:  <************.**************@******.***.******.***>
References:  <************.**************@******.***.******.***>
X-Mail-Count: 04279

 こんにちは,児玉@(株)エクサです。

小林さん,

 連休明け早々,出張の新幹線の中で書いています。

 「[oosquare-ml:04276] Re: 「 ATM の整備員は故障中の ATM を修理する」をどうあらわす?」のお返事
させていただきます。

   >>  小林さんはATMの状態を{complete}にしていますが,果たしてそう
   >> ですか。
   >
   >たしかに、「使用中・停止中・故障中」または「正常・故障中」で{complete}としてしまうと、おか
しいように思います。
   >「サービス時間外」とか「本部がトラブル対応中」とか、他にもいろいろなケースがありそうです。

 そうですよね。それにこの状態の遷移には一定の制約がありそう
ですし。

   >なるほど。「取引」や「保守」といった行為も、オブジェクトとしてモデル化するとだいぶやりやすく
なりそうです。

 はい,ビジネスシステムには事実の記録が必要なのです。

   >ただ、お示しいただいた図で理解できない点があります。
   >「時点」というのはどういう時点でしょうか?
   >「取引や保守を行った時点を記録する」ということであれば、「ATM」ではなく「取引」「保守」に関連
が引かれているべきではないかと思いますが...
   >何か勘違いをしていますでしょうか?

 ATMは時間の流れに並行して《動的》に状態が変わる。ある時点
では「故障中」,また別の時点では「使用中」というようにです。
これはスケジューリングでよく見られる「資源(resource)」の
扱いと同じです。
 では,時点別に異なるオブジェクトがあるのかということになり
ますが,概念モデルではそこまでは述べていません。そう実装して
もいいし,1つのオブジェクトが時点ごとに状態を持つように実装
してもかまいません。そこをあえて曖昧にしています。
 ユースケースが厳密な状態の記録を必要とすれば,時点(あるい
は区間)ごとにATMの状態オブジェクトを残しておくことになるか
も知れません。

 「取引」や「保守」に,なぜ「時点」がついていないかですが,
これは当たり前なので省略しています。「時点」はFowlerのいう
基本型(foundation type)なので,実装上は属性として扱うのが
普通です。関連線を引きたければ,「取引」,「保守」から「時点」
に引きます。文字絵だとめげるでしょ(^^)。

   >>  ATMの状態は省略,保守の種類も省略。ATMの状態によって可能な保守
   >> のタイプが異なるのは制約で記述します。どなたかOCLでtryしてみてく
   >> ださい。
   >
   >状態 = #故障中 implies 保守タイプ = #修理
   >状態 not #故障中 implies 保守タイプ = #点検
   >
   >といった感じでしょうか。OCLについては初耳状態で、しかもまとまった解説を発見できませんできたの
で、まったく自信はありません。

 解説としては,Eriksson & Penkerの「UMLによるビジネスモデ
リング」にあります。意外でしょ。あと,拙著でよければ「UMLモ
デリングの本質」に解説があります。

----
児玉公信@(株)エクサ
   エンタープライズソリューション事業部SPBOMソリューション部
 兼 技術部
 ***************@********.**.** *******@***.***
         児玉流メール道 家元