web-dev-qa-db-ja.com

このテキストを正しくアクティビティ図にするにはどうすればよいですか(タイマーの問題)。

これは非常に長いテキストからの抜粋であり、私にはわかりません。フォトブース(コインを入れると自分の写真が撮れるオートマタ)。

オートマトンには、コインが挿入されると記録するカメラがあります。顧客は、コインが挿入された直後にビデオをフリーズするために2分間の時間があるため、彼/彼女は写真を撮っています。次に、顧客はこの写真を印刷するか、記録モードに戻してカメラが再び記録するようにして、写真を撮り直すかを決定できます。この2分以内に、顧客は、印刷することを決定するまで、記録モードから画像に切り替えることができます。

お客様が写真を承諾した場合は印刷されます。 2分後にお客様が印刷する写真を撮影しなかった場合は、最新の写真が選択されて印刷されます。まったく写真が撮られなかった場合、オートマタは顧客が挿入したコインを返します。


最初はよくわかりません。したがって、コインが挿入されたとき、最初は2つの同時のものが明確にあります。カメラが記録中で、2分のタイマーが作動し始めます。しかし、それをアクティビティ図にどのように表示しますか?このように両方をアクティビティとして表示して続行できますか?

編集:ここでは、クリストフの解を表すはずの図enter image description here

そしてこれは私の古い間違った図です:

enter image description here

4
tenepolis

問題

あなたの図にはいくつかの欠陥があります。たとえば、カメラの録画とタイマーを同期するには、結合が必要です。しかし、その場合、セマンティクスは、両方のアクティビティを続行する前に終了する必要があることを意味します。その結果、最終的には少なくとも2分間待機します。

ソリューション

これを正しく解決するには、割り込み可能な一連のアクションを 割り込み可能な領域 (ドットで囲まれた領域)で囲む必要があります。

次に、この領域に イベントアクションを受け入れる (または、より良い 待機時間アクション )があり、タイマーの経過時に領域が中断され、- interrupting Edge タイムアウト時に実行されるアクションに。

ちなみに、「写真を撮る」アクションを表す 信号送信アクション を検討することもできます。これにより、割り込み可能な領域も離れます。イベント/信号が割り込み可能な領域を離れると、その領域を循環しているすべてのトークンが即座に消費されたと見なされます。

このモデリングでは、存在しない並行アクティビティのために人工的なフォークと結合を必要としません。

タイムアウトの完全な例 here があります。

7
Christophe