系统序列图 - 系统可以请求演员输入吗?

System sequence diagram - Can system request input from actor?

in uml - 系统时序图,系统可以向actor请求输入(见附图)

在我的示例中,场景是:系统正在提示用户确认输入,用户将在输入中输入。

想知道这是否是正确的表达方式?我像往常一样问,我已经用相反的方式做了,其中演员向系统和系统提供输入 return 基于输入的输出...

初步评论

在交互图中显示角色的做法已被广泛接受并且很普遍。

然而,原则上,UML 交互图(例如序列图)应该显示生命线之间的交互 ​​within an enclosing classifier:

  • 演员在您的系统之外,它不是您系统中任何封闭分类器的一部分。
  • 因此,只有当您的模型范围大于 IT 系统时,这才是有效的 UML,即您为使用 IT 系统的组织建模。
  • 此外,消息语义没有为人类参与者明确定义,这正是您问题背后的问题

保持一致

如果您选择继续您的建模方法并将演员视为任何其他分类器,那么您的演员实例应该像任何其他对象一样表现。

生命线上messages shows which object is the sender of the message and which object responds. You should consistently keep this logic, as you did in your diagram. It will be btw one of the rare place on your model where you can show that the system is at the origin of this specific interaction and not the user. (hint: don’t forget the execution specification的流程:增加可读性)

如果你通过相反方向的 arrow/message 来具体化演员的自由意志,你只会进一步增加歧义:这会给人一种印象,即演员是在消息,并且演员可以发送完全不同的消息。而且我不确定您的系统是否设计用于响应来自用户的任意消息。

另一个选择?

一个不那么模糊的替代方案可能是显示系统核心元素与表示 UI 的元素之间的交互:UI 元素充当用户的代理,但由于它是像任何其他对象一样,消息流的解释是明确的。

这是 ECB 分解背后的想法之一,C 是用例特定的控制器(因此它将此交互与需求联系起来),B 是 UI 边界接触特定类型的演员(无需进入 UI 细节)。

确认含糊不清。

作为对用户输入的响应,您的 SD 中将缺少此部分。不完整不会错。在这种情况下,您只需描述从确认开始的那部分。

作为某些系统的一部分 activity(例如,您有一个检测过热并要求用户继续关闭的控制过程)该部分不会显示使用开始案例可能类似于“观察 XY”。

无论如何,使用 system 作为右边的生命线似乎毫无意义。人们会对系统的哪个对象要求确认感兴趣。

问题始终是:图表的编辑想告诉别人什么。

简短回答:是

当然,这个交互的上下文不可能是系统,因为参与者在系统之外。但是,允许不对上下文建模,让交互成为它自己的上下文。或者您可以引入一个包含 Actor 和系统的上下文 Class。但这些只是正式考虑因素。

更重要的是,这样做是否有用。我会说,它可以。描述参与者将如何与系统交互是分析用例的结果之一。很多人会用文字来描述这个,但是在复杂的情况下,可以使用UML行为图,比如activity图或者序列图。

不过,我会重新考虑在这里使用同步消息。与人类演员的交流本质上是异步的。你永远不知道,消息是否到达,actor 是否理解它以及 actor 是否以适当的回复消息进行响应。

PS:回复消息应该显示它回复的消息的名称,而不是一些任意文本。如果需要,可以在冒号后显示 return 值 (confirmationInput():Answer)