在序列图中的组合片段中包含创建消息

Including a create message inside a combined fragment in sequence diagram

我正在完成有关时序图的作业。我的问题是我们是否可以在组合片段中包含创建或删除消息

简而言之:是的。你可以毫无问题地做到这一点。


更详细地说:尽量遵守 UML 规则,但不要只看法律书就受阻。当然最好不要违反UML大神们立下的规矩。但是就像你在晚上站在红色的 cossing 灯上,在那里你可以看到和听到没有其他人,那么无论如何都会阻碍你过马路?

一个经常出现的常见错误是忘记在 AD 中放置连接节点,这会使整个网络卡在特定的操作上。是的,错了。但基本上只适用于机器,大多数人都可以毫无问题地阅读其含义。只有律师会认为这是错误的。

所以总结一下:当你对某样东西建模并且你觉得它传递了信息时,那就没问题了。即使不是 100% 正确。力求正确,但不要让它阻碍你完成工作。如果你提出讨论,那还不错。一点也不!模型旨在讨论某些事情。因此,如果您的模型开始了讨论,那就更好了。您可以随时寻求建议并稍后修复。

简而言之

是的,你可以这样做,但你必须注意交互保持一致。

更多详情

没有什么能阻止您在组合片段中使用对象创建或对象删除。事实上,UML 2.5.1 规范中甚至有示例:图。 17.14 第 588 页显示了包含组合 alt 片段的序列图,其中创建和删除了交互的参与者。

如果语法没有问题,您仍然需要确保序列图的语义一致性。在这方面,有几个陷阱。例如:

  • 如果您在 altopt 片段中创建一个参与者,但在这个片段之外,这个新参与者将与其他实例交互,您会假设创建总是发生,而您的片段可能无法保证这一点。
  • 如果您有一些带有条件和循环的复杂序列,您最好确保没有消息发送给可能稍后创建的参与者。

还有一些歧义需要更好地避免。如果在片段的每次迭代中都发生这种创建,那么在循环中创建参与者可能会产生歧义:是否在每次迭代中都创建了新对象?如果循环中没有破坏,那么上次迭代创建的其他参与者是否还存在?如果生命线在 loop 片段之后有交互,是针对创建的第一个对象还是最后一个对象?等...