uml - 时序图中的同步消息是否必须要有回复消息
问题描述
我对序列图只有 3 个疑问。
- 是否必须为每条同步消息提供回复消息,我还想知道回复消息是方法还是消息?
- 在下图中,我可以使用从右到左的同步消息而不是回复方向(例如:'showAllCompaniesView' 和'updateCompaniesView()')吗?
解决方案
- 所以在上图中,第一条消息没有显示返回,因为它很简单。
Object2
唯一执行一些操作。 - 第二条消息触发了更复杂的事情
Object2
(即消息到Object3
)。忽略返回仍然是微不足道的,因为只有在for 消息Object1
的执行结束后才能开始。Object2
- 第三条消息有明确的返回。您可能会展示在执行期间您有一些复杂的消息结构(我只展示了一条消息,但您可以在这里想象一个森林,我猜)。如果您有分配或与某些返回结果相关的任何其他签名,您还将显示返回消息。从 p。UML 2.5 的 575:
回复消息标签用于回复消息。它具有以下形式:
<reply-message-label> ::= [<assignment-target> ‘=’] <message-name> [‘(’ [<output-argument-list>] ‘)’] [‘:’ <value-specification>]
- 是的。反之亦然,您可以使用消息。如果你有一个调用,你最终会进入一个堆栈(你也可以看到对象生命线顶部的附加方块。从编程的角度来看,这将更加棘手,因为你必须以某种方式在你的程序中接受外部调用正在运行。通常你需要使用线程技术来实现它。
1 的更多背景知识。我的陈述更多是出于经验而非规范。我再次开始阅读 UML 2.5(第 17.4.3 章)以查找详细信息 - 但找不到直接的陈述。以下是我找到的段落(按命名章节下方的顺序):
- 如果 messageSort 是回复,则 Message 表示从对 Operation 的同步调用返回。Message的参数对应Operation的out、inout和returnownedParameters,按照ownedParameters的顺序。
[...]
一条消息显示为从发送方 MessageEnd 到接收方 MessageEnd 的一条线。当从发送事件遍历到接收事件时,该行必须使得每个行片段都是水平的或向下的。发送和接收事件可能都在同一条生命线上。线或箭头的形式反映了消息的属性:
[...]
- 回复消息(messageSort 等于回复)有一条虚线,带有打开或填充的箭头。
[...]
出现在 request-message-label 中的 message-name 是 Message 的 name 属性。如果消息有签名,这将是签名引用的操作或信号的名称。否则,名称不受约束。
到目前为止的规格。回复的出现次数更多,但只是为了描述它必须是什么样子。此外,通常与虚线和空心箭头一起使用的返回箭头未列在 B.6 UML Notations 和 UML DI Representations 下的17.1包含在序列图中的图形节点下的表格中。但它用于17.14 CombinedFragment等示例图中。
让我特别皱眉的是语句A reply Message (messageSort equals reply) 有一条虚线,带有打开或填充的箭头。看起来您可以任意选择表格(填写或不填写)而没有语义差异。
嗯,UML 规范是由人类制定的,并非没有错误(我已经发送了一些错误报告)。不过,我也是人。也许其他人发现了一些我找不到的细节。
正如 AxelScheithauer 所评论的,开/关箭头可能与 a-/synch 符号兼容。不过,从异步消息返回似乎毫无意义。好吧,除非少数 OMG 作者之一出现在这里告诉我们真相 xD,否则我们将其留给猜测
推荐阅读
- javascript - 如何在 Chrome 上请求用户对音频的许可?
- python - Python tzinfo=pytz.utc 关于现有时间
- java - 将大字节数组转换为双变量中的自然数
- python - 为什么我们需要在登录后从客户端为每个 API 发送 JWT,因为 DRF 在 settings.py 中登录后维护 isAuthenticated 标志?
- excel - Sub 的限定符无效
- html - 如何使用html中的注销按钮在网站主页的导航栏中添加图像
- git - Git push 在推送后显示我不相关的文件夹
- java - 如何修复 IndexOutOfBoundsException 问题
- r - R:在数据框中获取匹配表情符号对的频率时遇到问题
- entity-framework - 在 Linq 和 EFCore 中查询多对多关系