タグ付けされた質問 「finite-state-machine」

9
制御フローとしての例外は深刻なアンチパターンと見なされますか?もしそうなら、なぜですか?
90年代後半に戻って、フロー制御として例外を使用するコードベースでかなり作業しました。テレフォニーアプリケーションを駆動する有限状態マシンを実装しました。最近、MVC Webアプリをやっているので、当時のことを思い出します。 どちらにもController、次に進む場所を決定し、データを宛先ロジックに提供するものがあります。DTMFトーンなどの旧式の電話のドメインからのユーザーアクションは、アクションメソッドのパラメーターになりましたがViewResult、aのようなものを返す代わりに、をスローしましたStateTransitionException。 主な違いは、アクションメソッドがvoid関数であったことだと思います。私はこの事実で私がしたことをすべて覚えていませんが、15年前のようにその仕事以来、私は他の仕事の生産コードでこれを見たことがないので、私は多くのことを覚える道を行くことをheしました。これはいわゆるアンチパターンであるという兆候だと思いました。 これは事実ですか?もしそうなら、なぜですか? 更新:質問をしたとき、@ MasonWheelerの回答をすでに念頭に置いていたので、私の知識に最も追加された回答を使用しました。彼も同様に正しい答えだと思います。

10
有限状態マシンの例[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 有限状態マシンの良い例を探しています。言語は特に重要ではなく、良い例です。 コードの実装は便利です(一般化された擬似コード)が、FSMのさまざまな使用法を収集することも非常に便利です。 例は必ずしもコンピューターベースである必要はありません。たとえば、Mike Dunlaveyの鉄道ネットワークの例は非常に便利です。

10
ステートマシンとスレッド
アラン・コックスはかつて「コンピューターは状態機械です。スレッドは状態機械をプログラムできない人々のためのものです」と言っていました。 Alanに直接質問することは謙虚な選択肢ではないので、ここで質問します。1つのスレッドとステートマシンのみを使用して、Javaなどの高レベル言語でマルチスレッド機能をどのように実現しますか?たとえば、実行する2つのアクティビティ(計算とI / Oの実行)があり、1つのアクティビティがブロックできる場合はどうなりますか? 高レベル言語のマルチスレッド化に代わる「ステートマシンのみ」の方法を使用できるか?

4
概念的には、ゲームのルール/制約(グラフィックス/物理学ではない)エンジンをどのように作成するか
自分で選んだアドベンチャーの本に似たシンプルなゲームを作りたい。プレイヤーには物語のテキストが表示され、可能性のリストからアクションを選択できます。これは、新しい物語のテキスト、広告無限につながります。唯一の問題は、以前の決定に応じて、可能性のリストが異なる可能性があることです。 一見すると、これは大量のif-elseステートメントのように聞こえるので、ルールエンジンが適切に機能することを意味します。しかし、それは私にとって有限状態マシンのようにも聞こえます。 これをJavaまたはGroovyで記述しようとしています。私は現在、概念的な問題、つまりこれを広範なレベルでどのように行うべきか(とにかく人々はチェスやカードゲームをどのように実装するのでしょうか)に興味がありますが、特定のライブラリに関するアドバイスも歓迎します。 明らかに、タイトルの「ゲームエンジン」は、衝突検出やその他の物理/グラフィックメカニクスを指すのではなく、プレイヤーが状況と彼の現在の状態に与えたオプションを決定するロジックです。

4
「状態」の定義
状態変数や状態マシンなどの「状態」を新しい(以前は非)プログラマーに定義する良い方法は何ですか?この概念がソフトウェアの作成に役立つ理由を説明する良い方法は何ですか?状態の概念は、プログラミングコースや書籍の開始時に一般的に明示的に教えられていますか?

6
有限状態マシンの故障から回復する方法は?
私の質問は非常に科学的に思えるかもしれませんが、よくある問題だと思います。経験豊富な開発者やプログラマーは、タイトルで言及した問題を回避するためのアドバイスを希望します。ところで、私が以下で説明するのは、iOSプロジェクトで積極的に解決しようとしている真の問題です。 有限状態マシンとは、これを意味します>いくつかのボタン、そのUIに関連するいくつかのセッション状態、およびこのUIが表すものがあるUIがあり、UIに値が部分的に表示されるデータがあり、いくつかの外部トリガーを受信して​​処理します(センサーからのコールバックで表されます)。状態図を作成して、そのUIとアプリケーションで望ましい、必要なシナリオをより適切にマップしました。ゆっくりとコードを実装するにつれて、アプリはより適切に動作し始めます。ただし、十分な堅牢性があるとは確信がありません。私の疑問は、自分自身の思考と実装プロセスが進行するのを見ることです。私はすべてをカバーしていると確信していましたが、UIでいくつかのブルートテストを行うだけで十分であり、動作にまだギャップがあることにすぐに気付きました..それらにパッチを適用しました。しかしながら、各コンポーネントは、他のコンポーネントからの入力、ユーザーまたは特定の外部ソースからの特定の入力に基づいて動作し、一連のイベント、状態変更などをトリガーします。複数のコンポーネントがあり、それぞれが入力で受信したトリガーのように動作します->トリガーとその送信者が分析->分析に基づいて何か(メッセージ、状態変化)を出力します 問題は、これは完全に自己完結型ではなく、私のコンポーネント(データベース項目、セッション状態、ボタンの状態)...イベントチェーンの範囲外で変更、影響、削除、またはその他の方法で変更される可能性があることです望ましいシナリオ。(電話がクラッシュし、バッテリーが突然空になります)これにより、システムが無効になり、システムが回復できなくなる可能性があります。アップルストアにある競合他社のアプリの多くで、これが見られます(これは問題だと人々は認識していませんが)、顧客は次のように書きます>「3つのドキュメントを追加しました。たとえそれらを見たとしても。」または「毎日ビデオを録画しましたが、あまりにログの多いビデオを録画した後、それらのキャプションをオフにすることはできません。キャプションのボタンはありません」 これらは単なる短縮例であり、顧客はしばしばそれをより詳細に説明します。それらに記載されている説明と動作から、特定のアプリにFSMの内訳があると思います。 究極の問題は、これをどのように回避でき、システムがそれ自体をブロックするのを防ぐ方法ですか? 編集>私は電話で1つのviewcontrollerのビューのコンテキストで話している、私はアプリケーションの一部を意味します。MVCパターンを理解し、機能ごとに個別のモジュールを用意しています。説明するものはすべて、UIの1つのキャンバスに関連しています。

5
オブジェクト指向プログラムは有限状態マシンとして見ることができますか?
これは哲学的/基本的な質問かもしれませんが、ただ明確にしたいだけです。 私の理解では、有限状態マシンは、システムの出力が現在の入力だけでなく、システムの現在の状態にも依存するシステムをモデル化する方法です。さらに、名前が示唆するように、有限状態マシンは、それぞれの状態と動作を持つ有限のN個の状態にセグメント化できます。 これが正しい場合、データおよび関数メンバーを持つすべてのオブジェクトをオブジェクト指向モデルの状態にして、オブジェクト指向設計を有限状態マシンにするべきではありませんか? それがオブジェクト設計におけるFSMの解釈ではない場合、ソフトウェアでFSMを実装するとき、人々は正確に何を意味しますか?私は何かが欠けていますか? ありがとう

4
子ステートマシンは、どのようにして制御を親ステートマシンに戻すことができますか?
私のトップレベルのステートマシンには、いくつかのステートとエッジがあります。これを親ステートマシンと呼びます。 A ----> B ----> C 親ステートマシン内のどのステートもステートマシンにすることができます。これらの子供をステートマシンと呼びます。 ___________ / \ A ----> | B0->B1->B2 | ----> C \____________/ 親ステートマシンがAからBに移行すると、Bのステートマシンが引き継ぎます。Bの実行が完了したら、制御を親の状態マシンに放棄し、状態Cに移行するにはどうすればよいですか?どのデザインパターンを使用していますか? 疑問に思うかもしれませんが、私は親の状態マシン内に子の状態マシンを持っています。私の正確なプロジェクトは非常に複雑であり、子の状態の内部動作をカプセル化するのは自然だからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.