私は状態図の状態を与えられた列挙型の値にします。 2番目のステップでは、状態図を前述のenum型のプロパティの制約として使用したいと思います。プロパティーのセッターの引数チェックとして。enum値を状態図の状態として使用するにはどうすればよいですか?
答えて
まだわかりません達成しようとしていることを完全に理解しています。しかし、ここではいくつかの考えがあります。ポイントを逃した場合にはお詫び申し上げます。
最初の質問は、なぜ列挙型の値と状態を同形にしたいのですか?情報を複製する最も一般的な意味で。複製された情報には、同期が外れる習慣があります。したがって、動機づけを理解することは有益です。
にもかかわらず、ここにいくつかの可能性があります。 UMLの世界で
1. UML /モデリング・パースペクティブ
状態モデルとそれに関連する列挙型の両方を持っている本当の必要はありません。一般に、UMLは、オブジェクトの現在の状態の値を読み取る方法を定義していません。ただし、特定のプロファイル(例:Executable UML)があります。実行可能なUMLでは、ステートマシンを持つクラスはすべて、current_state
という名前の読み取り専用属性を自動的に取得します。 current_state
の可能な値は、状態モデル内の状態の名前です。したがって、暗黙の列挙型を定義する状態マシンと見なすことができます。
この属性は読み取り専用です。それを変更する唯一の方法は、ステートマシンを使用する方法、つまりオブジェクトにイベントを送信する方法です。したがって、これはまた、ステートマシンプロトコルに違反する方法でcurrent_state
変数の値を変更することはできません。
実行可能なUMLプロファイル(または同様のもの)を使用していなくても、上記をルール/規則として記述するのは完全に有効です。必要に応じて自分のプロファイルを定義することができますが、それは過度の可能性がありますが、状況によって異なります。
重要な点は、モデリングの世界では列挙型は必要ないということです。
2.コード視点
コードにモデルを変換するとき、列挙は、現在の状態変数のタイプを定義するために賢明かつ一般的な方法です。モデル化のシナリオでは、current_state
属性を外部にのみ読み取るようにしたいと考えています。
- ステート・マシンの実装内から
current_state
変数を更新するためのプライベートメンバ関数 - ステートマシンをドライブするイベントごとに、
- パブリックメンバ関数:あなたは次の3つの他のものを必要とします状態マシンの実装。
したがって、コードの世界では、変数をcurrent_state
変数の無効なシーケンスが外部にのみ読み取られるようにすることを防止します。つまり、public読み取りアクセッサーしかありません。public writeアクセッサーはありません。
クラス内では、書き込みアクセサーをプライベートにして、呼び出されるのはステートマシンの実装内にあることを保証します。
パブリックの書き込みアクセサーの代わりに、ステートマシンを駆動するイベントに対応するパブリックメソッドを提供します。もっと下のステートマシンを実装上の詳細が、ここでは今のところ簡単な例です: 1.国家マトリックスまたはルック:
class Phone {
enum PhoneState {disconnected, connecting, connected, disconnecting};
public PhoneState current_state {get}; //no write accessor
//functions for generating state machine events
public void digit(int number) {..} //press digit key, e.g. while dialing
public void connect() {..} //make connection
public void disconnect() {..} //disconnect
}
ステートマシンを実装
ステートマシンを実装するための3つの一般的なパターンがあります表 2.ネストされたスイッチ 3.状態パターン
(1)hereの概要があります。 (2)&(3)は、hereに含まれています。
それは基本的にそれです。あなたの質問に私が答えたかどうか完全には分からない。謝罪しない場合は、達成しようとしていることについてより具体的なものかもしれません。
hth。
それは私の '問題'を解決しませんが、それは本当に良い概要です、私はさらなる研究のためのいくつかの指示を持っています。 –
ご迷惑をおかけしましたことをお詫び申し上げます。多分あなたは精巧にすることができますか? – sfinnie
列挙プロパティは、次のようにUMLで表現されています
_______________________
| <<enumeration>> |
| DaysOfTheWeek |
|_____________________|
| Sunday |
| Monday |
| Tuesday |
| ... |
|_____________________|
次に、あなただけ列挙し、あなたの状態図との関連を描くことができます。
希望これは私が詳細に実装を知らないが、私は、ステートマシンのパターン、ステートマシンを実装するための非常にエレガントな方法にあなたをリダイレクトします
に役立ちます。ウィキペディアのページ: http://en.wikipedia.org/wiki/State_pattern
いくつかのツールでは、列挙型>状態図の作成をクリックすることができます。これは、状態図がUMLモデルツリーの列挙型のルートに作成されることを意味します。したがって、状態図にはenumプロパティがあります。
私が使用しようとしているツール(EclipseベースのTOPCASED)にはこのようなオプションがないか、または私はそれを見ることができません。それでも、あなたの答えは、私をさまざまな角度から見るのに役立ちます。 –
- 1. 状態を値と新しい状態に変換する関数からFluxを作成するにはどうすればよいですか?
- 2. どのように電子状態で電子状態をチェックしますか?
- 3. JavaScriptを使用してハイパーリンクの状態を確認するにはどうすればよいですか?
- 4. jsonファイルを使用してjqueryデータテーブルの状態をロードするにはどうすればよいですか?
- 5. ドッカーコンテナをエラー状態にするにはどうすればよいですか?
- 6. ローカル通知を使用してアプリをスリープ状態にするにはどうすればよいですか?
- 7. セッション状態を保存するにはどうすればよいですか?
- 8. 状態を確認するにはどうすればよいですか?
- 9. RadioButton:IsChecked状態を変更するにはどうすればよいですか?
- 10. Reactive Extensionsを使用して状態をポーリングするにはどうすればよいですか?
- 11. Angular UI-Routerを使用して状態を取得するにはどうすればよいですか?
- 12. tryステートメントを使用して競合状態を回避するにはどうすればよいですか?
- 13. jQueryを使用してdivの現在の状態を返すにはどうすればよいですか?
- 14. Quartz TriggerStateのenum状態は何を表していますか?
- 15. 子状態と固定状態の違いは何ですか?
- 16. 状態が返されている状態でNULLを返す
- 17. BPMN図の状態
- 18. オペレーティングシステムの状態図
- 19. 独立した状態をJavaのenum値に設定する
- 20. フォームを元の状態に設定するにはどうすればよいですか?エンティティの状態を表すフォームが編集されている
- 21. は私がoccuringから、このような競合状態を防ぐにはどうすればよい(Laravelを)データベーストランザクションを使用した競合状態を
- 22. は、UMLの状態図の複合状態シェアのサブ状態同じ状態(?名)
- 23. ドラフトエディタ状態の親状態を更新していますか?
- 24. ServiceWorkerの重複した状態はどうすればよいですか?
- 25. 状態図のブール遷移条件を状態表に変換するにはどうすればいいですか
- 26. ブートストラップボタンをアクティブ状態にするにはどうすればいいですか?
- 27. railsのaasmコールバックで古い状態と新しい状態にアクセスするにはどうすればよいですか?
- 28. 並行状態図
- 29. react-reduxでレデューサー状態から値を持つコンポーネントの状態を更新するにはどうすればよいですか?
- 30. Spring.Netの状態はどうですか?
私は、モデル内にRedefined Classifier属性があることがわかりました。それは答えかもしれないようですが、私はまだ分かりません。 –
質問を明確にすることはできますか?つまり、「enumの値の間の正当な遷移のみが許されるように状態図を実装するにはどうすればいいのですか?」 – sfinnie
元の質問を編集してそれを鎮静化しました。 –