Questions tagged «finite-state-machine»

9
作为控制流的例外是否被认为是严重的反模式?如果是这样,为什么?
上世纪90年代后期,我在使用例外作为流控制的代码库中做了很多工作。它实现了一个有限状态机来驱动电话应用程序。最近,我想起那些日子,因为我一直在做MVC Web应用程序。 它们都具有Controllers,该s确定下一个下一步并将数据提供给目标逻辑。来自老式电话域的用户操作(例如DTMF音调)成为操作方法的参数,但是他们没有返回类似a的内容ViewResult,而是抛出了a StateTransitionException。 我认为主要区别在于动作方法是void功能。我不记得我对这个事实所做的所有事情,但是我一直犹豫要记住多少东西,因为自从15年前从事这项工作以来,我再也没有在生产代码中见过任何其他工作。我以为这是一个所谓的反模式迹象。 是这样吗?如果是,为什么? 更新:当我问这个问题时,我已经想到了@MasonWheeler的答案,所以我选择了最能增加我的知识的答案。我认为他也是一个正确的答案。

10
有限状态机的例子
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我正在寻找有限状态机的好例子。语言并不是特别重要,只是很好的例子。 代码实现很有用(通用伪代码),但是收集FSM的各种用法也非常有用。 示例不一定需要基于计算机,例如Mike Dunlavey的Railroad网络示例非常有用。

10
状态机与线程
艾伦·考克斯(Alan Cox)曾说过: “计算机是状态机。线程是为无法对状态机进行编程的人的。” 由于直接询问Alan并不是让我谦虚的选择,所以我想在这里问:一个人如何仅使用一个线程和状态机来实现高级语言(例如Java)的多线程功能?例如,如果要执行2个活动(进行计算和执行I / O)并且一个活动可以阻止该怎么办? 使用“仅状态机”方式是否可以替代高级语言中的多线程?

4
从概念上讲,人们如何制定游戏的规则/约束(不是图形/物理)引擎
我想制作一个类似于自己选择冒险书籍的简单游戏。向玩家显示一个叙述文字,并从一系列可能性中选择其动作。反过来,这导致了新的叙述性文本无穷大。唯一要注意的是,根据先前的某些决定,可能性列表可能会有所不同。 乍一看,这听起来像是if-else语句的负载,因此暗示规则引擎将就位。但是,对我来说,这听起来也像是一台有限状态机。 我打算用Java或Groovy编写。目前,我对概念性问题更感兴趣,即应该如何在广义上进行操作(无论如何,人们如何实施国际象棋或纸牌游戏?),但也欢迎在特定库中提供一些建议。 显然,标题中的“游戏引擎”不是指碰撞检测或其他物理/图形力学,而是决定玩家给出的情况及其当前状态的选择的逻辑。

4
“状态”的定义
在状态变量或状态机中为新的(以前是非)程序员定义“状态”的好方法是什么?有什么好的方法可以解释为什么这个概念对编写软件有用?通常在开始编程课程或书本中明确教过国家概念吗?

6
如何从有限状态机故障中恢复?
我的问题似乎很科学,但我认为这是一个普遍的问题,经验丰富的开发人员和程序员希望能提供一些建议来避免我在标题中提到的问题。顺便说一句,我描述的波纹管是我要在我的iOS项目中主动解决的一个实际问题,我想不惜一切代价避免它。 通过有限状态机,我的意思是:>我有一个带有几个按钮的UI,与该UI相关的几个会话状态以及该UI表示的内容,我有一些数据,这些数据的值部分显示在UI中,我接收并处理了一些外部触发器(由传感器的回调表示)。我制作了状态图,以更好地映射在该UI和应用程序中理想和可实现的相关方案。随着我慢慢实现代码,应用程序开始表现得越来越像它应该的样子。但是,我不是很自信。我的怀疑来自观察自己的想法和实施过程。我确信我已经涵盖了所有内容,但是足以在UI中进行一些粗暴的测试,并且我很快意识到在行为方面仍然存在差距。然而,由于每个组件都依赖于其他组件的输入并根据其他组件的行为运行,因此来自用户或某些外部源的某些输入会触发一系列事件,状态更改等。我有几个组件,每个组件的行为都像这样:输入时收到触发器->触发器,并分析其发送者->基于分析输出一些信息(消息,状态更改) 问题是,这不是完全独立的,并且我的组件(数据库项,会话状态,某些按钮的状态)...可以在事件链范围之外进行更改,影响,删除或以其他方式修改。理想的情况。(电话崩溃,电池突然没电了,这会导致系统无效),这可能会导致系统无法恢复。我在苹果商店上的许多竞争对手应用程序中都看到了这种情况(人们没有意识到这是问题所在),客户编写了这样的内容:“我添加了三个文档,到那儿走了之后,我无法打开它们,即使看到他们。” 或“我每天都录制视频,但是录制了太多日志的视频之后,我无法在其上打开字幕..,并且用于字幕的按钮没有 这些只是简短的示例,客户通常会对其进行更详细的描述。.根据它们中描述的描述和行为,我认为特定应用具有FSM故障。 因此,最终的问题是如何避免这种情况,以及如何保护系统避免自身阻塞? 编辑>我是在电话中一个viewcontroller视图的上下文中谈论,我的意思是应用程序的一部分。我了解MVC模式,我具有用于不同功能的单独模块。.我描述的所有内容都与UI上的一个画布相关。

5
可以将面向对象的程序视为有限状态机吗?
这可能是一个哲学/基本问题,但我只想澄清一下。 在我的理解中,有限状态机是一种对系统建模的方式,其中系统的输出不仅取决于当前的输入,而且还取决于系统的当前状态。另外,顾名思义,可以将有限状态机及其各自的状态和行为划分为有限的N个状态。 如果这是正确的,难道不是每个带有数据和函数成员的对象都是我们的面向对象模型中的一个状态,从而使任何面向对象的设计成为有限状态机吗? 如果这不是对象设计中FSM的解释,那么人们在软件中实现FSM时到底意味着什么?我错过了什么吗? 谢谢

4
子状态机如何将控制权交还给父状态机?
我的顶级状态机具有一些状态和边缘。我将其称为父状态机。 A ----> B ----> C 父状态机中的任何状态也可以是状态机。我将这些孩子称为状态机。 ___________ / \ A ----> | B0->B1->B2 | ----> C \____________/ 如果父状态机从A转换为B,则B的状态机将接管。一旦B完成运行,它应该如何将控制权交给父状态机并转换为状态C?您使用哪种设计模式? 如果您想知道,我在父状态机中有子状态机,因为我的确切项目非常复杂,并且封装子状态的内部工作是很自然的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.