GUI をステート マシンとして実装したいと考えています。これを行うことにはいくつかの利点といくつかの欠点があると思いますが、これはこの質問のトピックではありません。
これについて読んだ後、C++ でステート マシンをモデル化するいくつかの方法を見つけ、2 に固執しましたが、どの方法が GUI モデリングに適しているかわかりません。
次のメソッドを使用して、ステート マシンを状態のリストとして表します。
OnEvent(...);
OnEnterState(...);
OnExitState(...);
Iから
StateMachine::OnEvent(...)
イベントを転送しCurrentState::OnEvent(...)
、ここで遷移を行うかどうかの決定が行われます。移行時に を呼び出しCurrentState::OnExitState(...)
、NewState::OnEnterState()
CurrentState = NewState;
このアプローチでは、状態はアクションと密接に結合されますが
State
、1 つの状態から複数の状態に移動でき、異なる遷移に対して異なるアクションを実行する必要がある場合、複雑になる可能性があります。次のプロパティを持つ遷移のリストとしてステート マシンを表します。
InitialState
FinalState
OnEvent(...)
DoTransition(...)
Iから、ステート マシンと同じ値を持つ
StateMachine::OnEvent(...)
すべての遷移にイベントを転送します。遷移条件が満たされた場合、ループが停止し、メソッドが呼び出されて に設定されます。InitialState
CurrentState
DoTransition
CurrentState
Transition::FinalState
このアプローチ
Transition
を使用すると、非常に単純になりますが、遷移カウントの数が非常に多くなる可能性があります。また、ある状態がイベントを受け取ったときに実行されるアクションを追跡することも難しくなります。
GUIモデリングにはどのアプローチが良いと思いますか? 私の問題に適した他の表現を知っていますか?