【问题标题】:what the UML way to describe a master/slave state machine interaction描述主/从状态机交互的 UML 方式是什么
【发布时间】:2019-09-25 16:53:23
【问题描述】:

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

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

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

  • slave 可能会向 master 请求某些数据

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

【问题讨论】:

  • 你的尝试在哪里?
  • 我的系统有两个状态机你试过只有一个吗?
  • @ThomasKilian 描述主从的状态转换,以及两者的交互
  • @Bruno 一不适用。场景是平板电脑应用与桌面应用配合使用,并且平板电脑/桌面拥有自己的状态机
  • 不是“什么”而是“哪里”。

标签: uml state-diagram


【解决方案1】:

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

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

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

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

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

UML状态机图介绍请参考wikipedia

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 2021-12-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多