-1

我的系统有两台状态机,一台主机,一台从机。而且主从之间的状态也不是一一对应的。可能的相互作用如下。

  • 如果master转换到某个master状态,它会通知slave转换到某个slave状态

  • slave可以请求master进入某个master状态;如果master成功,master会通知slave进入某个slave状态。

  • 从站可能会向主站请求某些数据

描述这些交互的正确 UML 图是什么?状态图仅限于状态转换,不能描述来自从站的请求(状态转换或数据);交互图仅限于类/对象,不能应用于状态。

4

2 回答 2

0

您可以使用两个 UML 状态机图来描述这些交互,一个用于主设备,一个用于从设备。例如,要指定从状态 Idle 到状态 Busy 的转换发生在接收到来自 master 的信号时,您可以在从机的状态机图中Req使用转换标签绘制从 Idle 到 Busy 的转换。Req要指定主机Req在进入状态 X 时发送信号,请entry/Req在主机状态机图中 X 的状态符号内写入。

或者,您可以绘制用于发送和接收信号的元素(参见 UML 2.5.1 规范的 14.2.4.8.2 到 14.2.4.8.5 节):

信号符号

例如,在接收到带有参数 id 的信号 Req 时从 Idle 转为 Busy:

信号接收

您还描述了从站向主站请求某些数据的情况。为此,您需要主设备提供和从设备所需的接口的第三张图(或文本规范),例如:

界面

在从机的状态机图中,可以调用接口中定义的操作。例如,调用slave进入状态Busy的read操作master并将其存储在局部变量x中,写entry/x:=master.read()在状态符号X里面。

关于UML状态机图的介绍,请参考wikipedia

于 2019-05-08T06:53:33.643 回答
0

你描述的是主从之间的交互。

没有单一的解决方案,并且很难同时拥有所有可能的状态和事务的逻辑(实际上我认为根本不可能)。

这里要考虑的主要图表是:

  1. 描述请求/更改状态过程的序列图(您可能很少显示更改的各种触发器并使用 alt/opt 来显示进一步的行为)
  2. 描述如何处理状态更改过程的活动图
  3. 交互概览图,状态变化显示在“活动”级别,主从之间的协商在“序列”部分。

特别是最后一个是一个有趣的选项,因为它结合了活动和序列图的可能性。通常这是一种矫枉过正的做法,但对于您的具体情况可能是最好的主意。

除此之外,您还可以使用状态机图(两个,一个用于主设备,一个用于从设备),但它们将无法显示两个实体之间的交互。不过,解释什么是可用状态可能很有用。

如果不清楚,请随时评论此答案以获取更多详细信息。然后,我将尝试构建每个图表的示例(您已经在 www.admiralalit.nl 的答案中获得了活动图示例)。

于 2019-06-29T10:11:43.650 回答