Model &引用;被动(&Q);状态机-正确的术语?

Model &引用;被动(&Q);状态机-正确的术语?,model,uml,design-patterns,state-machine,Model,Uml,Design Patterns,State Machine,我正在寻找一个逻辑结构的正确术语,我称之为“被动状态机” 想象一下这个嵌入式设备:一些较低的程序层处理芯片读卡器,并通过确定三种状态对用户输入作出反应:“卡入”、“卡出”、“卡出错”。在此执行足够的低级操作。称之为状态机 下层将状态报告给上层程序层,上层程序层对更改做出反应,并与系统的其余部分进行通信,即发送消息、开关LED等 这个上层的程序逻辑也可以建模(UML 2),就像一个简化的状态机:它在状态和最重要的进入和退出动作之间有转换。这些状态基本上与较低层中的状态相同,但不是必需的(例如,可能

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

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

下层将状态报告给上层程序层,上层程序层对更改做出反应,并与系统的其余部分进行通信,即发送消息、开关LED等

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

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

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

但这真的是一个“有限状态机”(我想象这里有什么活动)?或者有没有更好的术语来解释这个模型的被动性

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

较低级别:

更高级别:

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


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

从上一句到最后一句,我认为您误解了状态机。状态机不决定转换,而是在接收到启用转换的
事件
/
触发器
时接受转换。基本状态机实际上是被动的。如果某个状态没有
完成
转换,则机器将等待,直到收到可以将其移动到连接状态的触发器

谢谢你,瓦伊诺洛。我知道两者都是状态机。请参阅我的编辑。使用“decise”我的意思是:测试不同触发条件的代码可能只在特定状态下执行。在其他状态下,不测试条件(在我的示例中,只有“正常”测试“按钮”)。相比之下,在“更高级别”SM中,在一个状态下不进行此类测试。所有状态的触发器都是相同的:“哦,状态已更改”。我想知道是否有一个术语来表达这种语义差异。我不明白你为什么需要这两台机器。为什么不将入口/出口/etc添加到“较低级别”状态机?拥有这两台机器,除了更复杂之外,你能从中得到什么?因为我划分了责任:实际项目有一个芯片卡包装类,它进行一些基本的有效性测试(魔法ID、校验和等),并将准备好的评估状态(“卡入”、“卡出”、“卡错误”)传递到主工作流(高级)。用户交互、消息传递和处理卡片内容都在那里完成。上级不应该知道如何检查卡的有效性,但下级应该知道。明天我们可能会使用完全不同的卡类型,并且在较低级别的状态操作可能会有所不同。然而,到上层(和三个状态)的接口将是相同的。也谢谢Eoin。现在我看到了两个状态机,实际上我有一些怀疑,最上面的一个是否真的是一个状态机。它在转换上没有任何事件,因此转换永远不会发生。机器将处于“正常”状态。分层状态机形式主义的工作方式是,状态机中的状态可以分解为较低级别的状态机。在你的情况下,我不认为这是怎么回事,是吗?上层状态机的结构反映了下层状态机的结构。但我看不出事件是如何在他们之间传递的。抱歉,如果我遗漏了什么。转换是从外部切换的:想象一段代码读取较低的SM并“触发”较高的转换。这就是我说的“被动”的意思为了用UML进行清晰的图形表示,我将“上层”视为放置适当操作的地方