时序图中同步消息是否一定要有回复消息

Is it a must to have a reply message for synchronous message in sequence diagrams

我对时序图只有3个疑问。

  1. 是否必须为每个同步消息都有回复消息,我还想知道回复消息是一种方法还是只是一条消息?
  2. 在我的下图中,我可以使用从右到左的同步消息而不是回复方向(例如:'showAllCompaniesView' 和 'updateCompaniesView()')吗?

  1. 不需要回复。如果省略它,同步消息将隐含 return。在被调用对象执行某些操作的情况下,您将使用 return 消息,然后才向调用者发送 return 消息,以进行进一步的操作。这是一个粗略的草图,我省略了几乎所有不需要的东西:
  • 所以在上图中,第一条消息没有显示 return,因为它很简单。 Object2 只执行一些操作。
  • 第二条消息在 Object2 中触发了更复杂的内容(即发往 Object3 的消息)。省略 return 仍然很简单,因为 Object1 只能在消息的 Object2 执行结束后开始。
  • 第三条消息有明确的 return。您可能会显示在执行期间您有一些复杂消息结构的地方(我只显示了一条消息,但您可以想象这里有一片森林,我猜)。如果您有与某些 return 结果相关的作业或任何其他签名,您也会显示一条 return 消息。从第UML 2.5 的 575:

A reply-message-label is used for reply Messages. It has the following form:

<reply-message-label> ::= [<assignment-target> ‘=’] <message-name> [‘(’ [<output-argument-list>] ‘)’] [‘:’ <value-specification>]

  1. 是的。反之亦然。如果你有一个电话,你最终会进入一个堆栈(你也可以看到对象生命线顶部的附加方块。从编程的角度来看,这将更加棘手,因为你必须以某种方式在你的程序中接受外部调用是 运行。通常您需要使用线程技术来实现它。

1 的更多背景知识。我的陈述更多是出于经验而非规格。我再次开始阅读 UML 2.5(第 17.4.3 章)以查找详细信息 - 但找不到直接声明。以下是我找到的段落(按命名章节下方的顺序):

  • If the messageSort is reply, then the Message represents the return from a synchronous call to the Operation. The arguments of the Message correspond to the out, inout and return ownedParameters of the Operation, in the order of the ownedParameters.

[...]

A message is shown as a line from the sender MessageEnd to the receiver MessageEnd. The line must be such that every line fragment is either horizontal or downwards when traversed from send event to receive event. The send and receive events may both be on the same lifeline. The form of the line or arrowhead reflects properties of the message:

[...]

  • A reply Message (messageSort equals reply) has a dashed line with either an open or filled arrow head.

[...]

The message-name appearing in a request-message-label is the name property of the Message. If the Message has a signature, this will be the name of the Operation or Signal referenced by the signature. Otherwise the name is unconstrained.

到目前为止的规格。 reply 出现的次数更多,但只是为了描述它的样子。此外,通常与虚线和空心箭头一起使用的return箭头未在table中列出17.1 Graphic Nodes Included in Sequence Diagrams no under [=38] =]B.6 UML 符号和 UML DI 表示。但它用于示例图中,例如 17.14 CombinedFragment.

让我特别皱眉的是语句A reply Message (messageSort equals reply) has a dash line with either an open or filled arrow head. 看起来你可以任意选择没有语义差异的形式(填写或不填写)。

好吧,UML 规范是由人制定的,并非没有错误(我已经发送了一些错误报告)。然而,我也是人。也许其他人发现了一些我找不到的细节。


正如 AxelScheithauer 评论的那样,open/closed 箭头可能与 a-/synch 符号兼容。但是,来自异步消息的 return 似乎毫无意义。好吧,除非少数 OMG 作者之一出现在这里告诉我们真相,否则我们将其留给猜测 xD