現在、階層ステート マシン (UML ステート マシン、ステートチャートなど) について調査していますが、次の点がよくわかりません。
遷移中および状態からのマシン独自のイベント キューへのイベントのプッシュは有効ですか?有効である場合、実際に安全に使用されますか?それとも回避する必要がありますか? これを行う際に特定の影響がありますか (少なくとも実装の癖、直交領域が機能するときの問題など)。
2 台のダミー マシンを使用して質問を説明します。
次のマシンは
A
event を待機している状態になりA_to_B
、その後、遷移アクションとしてイベントをディスパッチすることで無限ループに入ります。+-----+ +-----+ +-----+ | A | A_to_B / | B | B_to_C / | C | |-----| dispatch B_to_C |-----| dispatch C_to_A |-----| O---->| +------------------->| +------------------->| | | | | | | | +-----+ +-----+ +-----+ ^ C_to_A / | | dispatch A_to_B | +-----------------------------------------------------+
次のマシンは、エントリ アクションとしてイベントをディスパッチすることで、すぐに無限ループに入ります。
+-------------------+ +-------------------+ +-----+ | A | | B | | C | |-------------------| A_to_B |-------------------| B_to_C |-----| O---->| on entry: +---------->| on entry: +---------->| | | dispatch A_to_B | | dispatch B_to_C | | | | | | dispatch C_to_A | | | +-------------------+ +-------------------+ +-----+ ^ | | C_to_A | +---------------------------------------------------------------+