Uml 在序列图中调用相同功能的两个参与者。如何表现?

Uml 在序列图中调用相同功能的两个参与者。如何表现?,uml,actor,sequence-diagram,Uml,Actor,Sequence Diagram,我有一个设备,我用一个类来表示,有两个演员,一个远程和本地操作员,可以打开或关闭设备。两个参与者都将使用设备的功能。但我现在如何使用序列图来表示它们,因为如果我从本地和远程绘制事件,它将在设备上显示一个接一个发生的事件,但实际上两个参与者使用相同的函数,并且可以随时调用它。那么,我如何在下面的序列图中表示这两个参与者呢 另外,RAN40L是设备,CMS是远程操作员,模拟器操作员是本地操作员。 这是一个使用两个参与者的好例子。默认情况下,将一个参与者置于另一个参与者的对立面(本示例中没有这样做)。

我有一个设备,我用一个类来表示,有两个演员,一个远程和本地操作员,可以打开或关闭设备。两个参与者都将使用设备的功能。但我现在如何使用序列图来表示它们,因为如果我从本地和远程绘制事件,它将在设备上显示一个接一个发生的事件,但实际上两个参与者使用相同的函数,并且可以随时调用它。那么,我如何在下面的序列图中表示这两个参与者呢

另外,RAN40L是设备,CMS是远程操作员,模拟器操作员是本地操作员。


这是一个使用两个参与者的好例子。默认情况下,将一个参与者置于另一个参与者的对立面(本示例中没有这样做)。

碰巧,我在国防行业拥有丰富的经验,包括海军CMS,因此我熟悉该领域

关键的问题是,与UML一样,您希望在图中显示什么,这当然与您在其他图中显示的内容有关。没有一张图是单独阅读的,你永远不会在一张序列图中捕捉到整个雷达功能

请记住,序列图旨在以严格的顺序显示发生的事情。使用适当的片段可以显示一些基本的并发性,但是如果您想显示两个参与者做完全相同的事情,序列实际上是一个,并且在这两种情况下是相同的,那么序列图是错误的

假设这个序列是作为一个用例的详细说明,那么解决方案是用一个参与者替换两个参与者,例如“雷达控制器”。然后,该参与者可以被专门化为CMS和模拟器,如果雷达不知道或不关心在某些(使用)情况下与它交互的人,而在其他情况下则不知道,这是有意义的

如果雷达从未做出区分,那么根本就不应该有两个参与者。演员必须对与之交互的系统有意义,否则你的演员模型就有问题了

因此,一种解决方案是按如下方式构造用例


参与者被认为只是序列图中的另一个对象。你可以任意使用许多角色,就像使用任何其他对象一样使用它们,没有这个意义上的限制

尽管有一些风格指南,最重要的是关于演员在图表上的位置。通常的做法是在图的边框上显示Actor,将内部系统对象放在其中。此外,人类角色通常显示在左侧,而系统角色保持在右侧。参与者不应与系统对象“混合”。下面是一个简单的例子:


行为图中的所有内容都是在图定义的行为启动后执行的。 若参和者单独进行交互,并且他们的交互不会在单个执行中混合,那个么您必须为每个案例绘制图表。
我想说,您需要两个图表,每个图表对应一个参与者。

问题在服务器上,即从服务器的时间线来看,似乎客户端1请求在客户端2之前送达,这是我想要避免的问题。感谢您对答案的非常好的解释,如果雷达从未做出区分,仍然在您提到的最后一点上,不应该有两个演员。我认为,就雷达而言,谁开始旋转并不重要,但考虑到可供使用的功能,这一点很重要。我仍然有点困惑,在角色之间的区别中,角色对用例来说无关紧要,它是需要的,但对其他一些图表来说可能是不相关的。请阅读认可的答案,就像你建议的那样,我可以画两个图表,但角色和操作员的用例都是相同的,可以是远程操作的概括还有本地运营商,这里没有提到,在你的问题中,演员们有一个通用的。我的回答与你的问题相符。但若有通用的参和者,在序列图中使用它,在这种情况下只需要一个参和者。