1

AとBの2つのコンポーネントを含むシステムが与えられ、

システムはAとBを同時に起動します。これで、Aは状態{A.Starting、A.Ready}を通過でき、Bは状態{B.Starting、B.DoingX、B.DoingY}になります。(AとBの状態間を遷移するイベントには、それに応じた名前が付けられます。B.doingx=> BはB.DoingXなどに移動します...)

yuml.meのAおよびBステートマシン

それをモデル化したい

  • AがA.Startingにある間、またはBがB.Startingにある間、システムは「開始中」です
  • AがA.Readyにあり、BがB.DoingXにある場合、システムは「DoingX」状態にあります。
  • AがA.Readyにあり、BがB.DoingYにある場合、システムは「DoingY」状態になります。

yuml.meのシステムステートマシン

私が間違っていなければ、ここでfork/join疑似状態を使用できます。

しかし、これらのモデル要素には、上記の合成状態の宣言型セマンティクスがありますか?これをモデル化する別の方法はありますか?

(注:図はhttp://yuml.meからのものです)

4

1 に答える 1

3

これらを引き離してみませんか?これをモデル化する方法に関する別のアイデアを次に示します (私が正しく理解していると仮定します)。

  • 並列領域で A.Starting および B.Starting と呼ばれる状態を含む状態「開始」入ります)

  • 「A.Ready」状態の領域を含む別の状態「Doing」と、2 つの状態「B.DoingX」と「B.DoingY」を含む別の並列領域。

全体的な「DoingX」状態が本当に必要な場合は、A.Ready に対応する 2 つの状態を作成する必要がある場合があります。

とにかく、より広い観点から:「システムは状態にある...」と言うとき、あなたの視点はここから少しずれていると思います。むしろ、そのようなステートマシンによってモデル化されたシステムは、一連の状態にあります。したがって、通常、「システムは現在、A.Ready および B.DoingX にある」と喜んで言います。

必要なのは用語の変更だけかもしれません。これはどうですか:

A.Ready および B.DoingX 状態がアクティブな場合、システムは構成「DoingX」にありますか?

コメントへの応答: はい、これは標準です。上部構造の仕様 (バージョン 2.4 ベータ) からの対応する部分は次のとおりです。

階層ステート マシンでは、複数のステートを同時にアクティブにすることができます。[...] 現在のアクティブな「状態」は、実際には、ルート領域の最上位の状態から始まり、最も内側のアクティブなサブ状態までの一連の状態ツリーによって表されます。このような状態ツリーを状態構成と呼びます。

于 2011-10-19T12:07:49.713 に答える