如何在状态机中表示具有嵌套选择的序列图?

3
我已经创建了一个序列图,图中有一个选择块,治疗师可以选择控制视频录像机或与一对夫妇交谈,在该选择块内部有两个选择块,第一个选择块是与A交谈或与B交谈,第二个选择块是控制A或控制B。
序列图: enter image description here 参考资料

enter image description here

状态机:

enter image description here

我不确定如何为状态机创建一个循环,我尝试在问候B之后创建一个新的状态,我称之为session,想法是在其他状态之后可以进入session状态,然后从那里进入其他状态,表示某种循环。
但是我遇到了一个问题,在序列图中我添加了两条新线,这样我可以在问候之后进入另一个状态,当我处于与B交谈的状态时,我可以使用输入replyB返回到session状态,但是如果我现在处于session状态并且想要进入与A交谈的状态,我不知道该使用什么输入和如何操作。

enter image description here

状态机更新:

enter image description here


1
这对我来说看起来像是一个业务流程。在那里我会使用活动。 - undefined
1个回答

1
序列图模拟了实例之间的交互场景。状态图记录了实例、类或系统的状态以及如何从一个状态过渡到下一个状态。因此,将序列转化为状态并没有什么诀窍。这完全取决于您的状态图的焦点以及相关的状态。
我不完全了解您的场景,但如果状态图是针对“治疗师”的话,您可以想象以下状态:
- 与A交谈 - 与B交谈 - 控制A - 控制B - 分析A - 分析B
问题是,是什么触发了状态的改变?接收到的消息是一个很好的触发器,但发送的消息并不能告诉我们治疗师发送消息的事件是什么。
无论如何,状态必须具有不同的名称(因此不能有两个状态为“s1”)。
分叉用于并行状态,例如在将控制权交给具有正交区域的复合状态时。这似乎在这里是不需要的。决策节点用于选择,例如当同一传出转换可以根据某些条件到达多个状态之一时。语义与alt类似,但在我看来,它们应该在状态图中尽量避免使用,并保留给活动图。

我还没有弄清楚这个循环的伙伴,你能帮忙吗? - undefined
1
在状态图中没有循环的等效物。状态图不是用来建模算法的。循环通常是指一个状态回到之前的状态。如果你想要根据某些条件来实现这个循环,你需要在状态图中添加一个决策节点来表示循环条件。(顺便说一句,在SO上,你不应该根本性地编辑一个问题来提出新问题,而是应该提出一个新问题) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接