如何绘制根据先前接收到的事件更改下一个状态的状态机

How to diagram state machine that changes next state based on previously received events

不知道有没有什么好的方法可以用UML2状态图来表示。

给定一组状态,状态 1、状态 2、状态 3 和状态 4。给定一组事件,事件 2、事件 3 和事件 4。

各州的相对优先级由州编号表示。数字越大优先级越高。如果该状态可能处于活动状态,则接收其编号与状态编号匹配的事件会切换。鉴于状态 1 是默认优先级,因此没有事件可以切换此优先级。

因此,对于以下事件序列,我预计会发生以下转变:

  1. 状态机初始化->进入状态1
  2. 事件 2 -> 状态 2 可能处于活动状态。从状态 1 到状态 2 的转换。
  3. 事件 4 -> 状态 4 可能处于活动状态。从状态 2 过渡到状态 4。
  4. 事件 3 -> 状态 3 可能处于活动状态。没有过渡。
  5. 事件 4 -> 状态 4 可能处于活动状态。从状态 4 到状态 3 的转换。
  6. 事件 2 -> 状态 2 可能处于活动状态。没有过渡。
  7. 事件 3 -> 状态 3 可能处于活动状态。从状态 3 到状态 1 的转换。

我能想到的将其绘制为状态图的唯一方法是拥有正交状态。一侧捕获事件以确定每个状态是否可能处于活动状态。另一方必须根据第一方的当前状态集进行转换。这看起来很丑陋和令人困惑。

有没有一种在 UML2 统计图表中表示它的好方法?

嗯,这可以用正交状态来完成。但是,正如您所说,它非常丑陋。首先,用一个正交区域和两个状态对一个简单的布尔变量建模真的有点过分了(也许你不打算那样做,但我已经见过很多次了)。其次,因为选择正确的状态实际上是一种算法,而 activity 图表更适合这一点。

所以我的解决方案是这样的: 状态 3 和 4 中的内部转换只是消耗事件而不做任何事情,从而防止不必要地离开和重新进入状态。

我认为这个模型有趣的部分在于行为在不同状态下的差异。通过将状态选择移动到另一个图表中,这两个问题很好地分开了。