私は最近boost::statechart
ライブラリ(有限状態マシン)について読んだことがあります。私はこのコンセプトが大好きです。C#には有限状態マシンが含まれていますか?
C#にも同様のメカニズムがありますか?または、特定のデザインパターンを使用して実装できますか?
私は最近boost::statechart
ライブラリ(有限状態マシン)について読んだことがあります。私はこのコンセプトが大好きです。C#には有限状態マシンが含まれていますか?
C#にも同様のメカニズムがありますか?または、特定のデザインパターンを使用して実装できますか?
はい、C#のコンパイラ生成ステートマシンはiterator blocksです。
独自のステートマシンを実装する場合は、IEnumerable<T>
とIEnumerator<T>
インターフェイスのカスタム実装を作成できます。
どちらのアプローチも、.NETフレームワークのiterator patternの実装を強調しています。
Workflow Foundation (.NET 3.0)には、ステートマシンワークフローがあります。 4.0は現在まったく同じものを持っていませんが、4.0を使って状態マシンのワークフローを作成することは間違いありません。
.NET 4 Platform Updateには、WF4の状態マシンサポートが付属しています。 – Will
FSMに近いものは.NET 3.5のワークフローですが、ワークフローも正確にFSMではありません。
FSMを使用すると、コードにを明示的に作成でき、バグを作成する機会が少なくなります。それに、もちろん、いくつかのシステムは本質的にFSMであるため、そういうものをコード化するのが自然です。
FSMはFlying Spaghetti Monsterの略です。私はあなたが間違った質問に答えたと思います。 –
私は彼がフライングスパゲッティモンスターに言及していなかったと確信している代わりに、有限状態機械を指していた。 –
私は、(とりわけ).NET用の汎用有限状態マシンを実装するオープンソースプロジェクトを維持しています。これはQuickGraphの上に構築されているので、多くのグラフ解析アルゴリズムを無料で入手できます。
このプロジェクトの詳細については、this pageを、詳細については、Jolt.Automata : Finite State Machinesを参照してください。
3.0および3.5の基本クラスライブラリの一部であるWindows Workflow Foundation(WF)には、アプリケーションのステートマシンを管理するステートマシンワークフロー設計が含まれています。
今後の4.0リリースではワークフローが完全に書き直されており、新しいWF 4.0クラスは状態マシンをネイティブにサポートしていませんが、3.0/3.5クラスはすべて4.0で完全にサポートされています。
.NET 4 Update 1では、今以下のクラスでそれをサポートしています。 ここSystem.Activities.Statements.StateMachine
がtutorial on how to use itです。 ここにはhands on labがあります。
ステートレス - >http://code.google.com/p/stateless/をチェックしてください。より重いWWFの代わりに軽量です。
ここではツールの作者による記事のカップルです:
私はステートマシンを書い作るために反復子ブロックを利用していますYieldMachineと呼ばれるオープンソースのライブラリを書きました簡単です。
詳しくは、this answerで説明しました。
すごく早く、応答のためにありがとう – Maciek
イテレータははるかに状態機械ではありません。 FSMのいくつかの基本的な概念は、状態、遷移、遷移ガード、アクションおよび階層状態である。これらは反復子ブロックで明示的ではないので、これがFSMの実装であることに同意しません。 – Henri
イテレータブロックはステートマシンとして実装されていますが、任意のステートマシンを構築するのに適しているわけではありません。 Erik Lippertはここにこの点を書いています:http://stackoverflow.com/questions/1194853/implementing-a-state-machine-using-the-yield-keyword/1195205#1195205 –