事件和状态之间有明显的区别吗

问题描述 投票:0回答:3

这个问题有点哲学,就像“数据和代码是否是同一件事”。

事件(信号)和状态之间有明显的区别吗?

示例:

例如,有一辆汽车从路边经过。当汽车喇叭响起时,一个过马路的男人(

man_A
)突然停下来。喇叭是信号,“
man_A
突然停止”是
man_A
的状态。

另一名男子(

man_B
)也在同一时间、同一地点过马路。

我们假设

man_B
是聋子,所以他听不到喇叭声。但意识到“
man_A
突然停止”对他来说是一个信号。他会突然停下来,就像听到喇叭声一样。

所以我会说“一个状态可以是另一个进程的信号。信号将进程置于另一个状态。这就是为什么它们是完全相同的东西”

我错了吗,它们之间有明显的区别吗?

信号是一种状态变化。我们可以定义任何具有两种状态的信号。

statechart scxml
3个回答
1
投票

它们非常非常不同:

  • 同一事件可能会导致转换到不同的状态,具体取决于当前状态:
    Three states with transitions between them, triggered by the same event

  • 在 SCXML 中,您可以使用

    <parallel>
    状态来定义正交区域。在这种情况下,单个事件可能会触发多个同时转换到不同状态:
    enter image description here

  • 此外,由于可能存在

    cond="…"
    属性,当由事件触发时,可能会或可能不会发生到另一个状态的转换。所以现在我们有一个可能不会改变状态的事件。

  • 此外,可以进行没有
  • event

    属性的转换,一旦某些数据模型值或脚本结果正确,就会导致状态更改。所以现在我们可以在没有触发事件的情况下发生状态更改。

    
    


0
投票

状态-

变化

是信号的结果,并且其本身可以被视为信号。但这不是国家本身。信号消失很久之后的状态依然存在。 例如,初始状态如何成为信号。


0
投票

事件发生在特定时间点。之后就是历史了。电子邮件就是一个完美的例子。一旦沟通,就无法再改变。您存档中的所有电子邮件都已成为历史。

状态会随着时间而改变。只要你正在编辑一封电子邮件,它就是你的邮件编辑器中的一种状态,你可以随意更改它。电子邮件到达后,接收者可以将其存储在有状态存储中。这让他能够改变它(但愿他不会这样做)。但他永远无法改变已发送的消息。很多情况下,都有日志文件可以证明。

因此,状态和事件遵循不同的数学规则。状态空间可以使用谓词(来自谓词逻辑)进行操作,并且事件流遵循迹代数定律。如果我们知道先前的状态以及导致该状态的所有事件,这使我们能够重建状态。然而,仅从状态空间重建事件历史是不可能的。

这对如何设计软件有影响。由于状态可以从事件构建,因此最自然的方法是在设计应用程序之前查看事件流。然后您可以编写应用程序服务来处理这些事件流。

当我设计软件时,我倾向于有两个数据层:事件层和状态层。在事件层,我设计了通信结构。在状态层,我放置了存储状态的各种数据库。这在保持软件总量小且易于管理方面发挥了奇迹。

© www.soinside.com 2019 - 2024. All rights reserved.