当前位置: 首页 > 知识库问答 >
问题:

“被动”状态机-正确的术语?

欧阳晗日
2023-03-14

我在寻找一个逻辑结构的正确术语,我称之为“被动状态机”。

想象一下这个嵌入式设备:一些较低的程序层处理芯片读卡器,并通过确定三种状态对用户输入做出反应:“卡入”、“卡出”、“卡错”。在此执行足够的低级操作。称之为状态机。

下层向上层程序层报告状态,上层程序层对更改作出反应,并与系统的其余部分通信,即发送消息、开关、指示灯等。

这个上层的程序逻辑也可以建模(UML2),就像一个简化的状态机:它在状态和最重要的进入和退出操作之间进行转换。这些状态基本上与较低层中的状态相同,但不是必需的(例如,可能会减少为“卡正常”、“卡不正常”)。

最大的区别在于,这个“上层状态机”不做任何决策——它只对从下层得到的状态做出反应,并提供操作。状态/转换/动作模型只是一种很好的方式,可以向读者展示逻辑(当然,还可以告诉编译器要做什么……)以精心安排的方式。

或者换一种说法:在我所理解的“真实”状态机中,状态的逻辑决定了要转换到的下一个状态。在“被动”变体中,一些外部实体做决定,国家也相应地遵循。结果:状态之间的所有转换必须在上层是可能的。

但这真的是一个“有限状态机”(我想象这里有什么活动)?还是有更好的说法来解释这种模式的被动性?

编辑:谢谢回复!两个数字需要澄清。当然,两者都是状态机。然而,我看到了一些质的区别:想象一下“较低级别”的SM与硬件(阀门、传感器)直接接触,并且知道它反映的系统。例如,只有“正常”状态可以对“测试按钮”做出反应,其他状态则不能。并非所有的转换都是可能的。“更高级别”被认为是“愚蠢的”,应该只可视化/报告它从较低级别获得的输入。所以所有的转变都必须是可能的。状态切换逻辑对于所有状态都是相同的,所有状态都将在状态之外实现(以程序员的身份思考),以避免冗余。它不做决定,只做进入/退出动作。

共有2个答案

纪实
2023-03-14

从你的前一句到最后一句,我想你误解了状态机。状态机不决定转换,而是在接收到启用转换的<代码>事件 /<代码>触发器 时接受它们。基本状态机实际上是被动的。如果一个状态没有<代码>完成 转换,机器会等待,直到它收到一个可以将其移动到连接状态的触发器。

何兴邦
2023-03-14

我认为你只是有一个层次化的状态机(状态图和UML都支持)。也许如果你能发布一个状态机的图表,我们可以提供更好的意见,但听起来你的“低级”机器将被建模为“上层”的(复合)状态。你有从那个状态到其他状态的转换,或者只是回到它自己?

从某种意义上说,所有的金融服务管理机构都是“被动的”。它们定义了一组有效状态、它们之间允许的转换、导致转换发生的触发器(条件)以及转换期间发生的(可选)操作。你的上层状态机不遵循这个模型吗?

 类似资料:
  • 这里的“自动机”指的是”确定有限状态自动机”。而自动机是信息学奥林匹克竞赛、计算机科学中被广泛使用的一个数学模型,其思想在许多字符串算法中都有涉及,学习自动机有助于理解上述算法,但是学习自动机前一定要先了解基础图论的相关知识,这样才更好理解自动机。 自动机(确定有限状态自动机)是由一个非空有限状态的集合Q、一个输入字母表 Σ(非空有限字符的集合)、一个转移函数(单值映射)、一个开始状态、一个接受状

  • 问题内容: 我做了一个小实验:http : //codepen.io/hawkphil/pen/NqMomm?editors=101 这是我的状态流(单击按钮): 在每个状态变化,我在出了 但是,你可以在看线,奇怪的事情发生了。我从“后退”按钮获得的“思维”,它显示为先前的状态()。这是不对的,对吧?它应该显示为以前的状态,因为我必须通过单击按钮来 手动*状态。我还显示了(line )中的值,以防

  • 状态机技术选型? Spring StateMachine 还是 阿里的Cola StateMachine? 需求:做一个审评流程,涉及到不同层级负责人审批,由于业务不是很复杂,所以决定采用状态机

  • 如果我必须用一个状态图来画一个确定性有限自动机,以接受一种语言,例如{λε{a,b}*:λ这个词包含a的偶数和b的奇数,我怎么知道我有多少个状态?

  • 问题内容: 抱歉,我真的很想念React中子组件内部的传递。 我已经实现了一个包含3个组件的待办事项列表。 有一个组成部分和一个组成部分。状态仅存储在组件中。 显示器起步不错,因此可以看到道具。但是在提交表单后,我收到了以下错误: TypeError:this.props.tasks.map不是函数 当我console.log时,我没有得到我的数组,而是数组的长度。 你知道为什么吗? 编辑 :谢谢

  • 为了在重新创建活动后(例如在屏幕方向更改后)恢复活动的状态,我在SaveInstanceState()和onRestoreInstanceState()上实现了。保存/恢复int、double等简单信息很简单,但保存/恢复Timer等对象又如何呢?