UML之序列图的消息

序列图表现各参与者之间为完成某个行为而发生的交互及其时间顺序,序列图中的交互通过消息实现。消息是从一条生命线到另一条生命线的通信,它们通常是水平或倾斜向下的箭头,从发送方生命线离开,到达接收方生命线。如果需要,在这些消息中可以传递参数值,但要注意确保参数类型与参数值与接收生命线角色所定义的操作相匹配。

同步消息及其返回消息

带有实心箭头的实线表示同步消息。发送方生命线向接收方生命线发送同步消息,然后发送方等待返回。同步消息的返回消息使用带有V形箭头的虚线表示,它由接收方生命线指向发送方生命线。

通常同步消息通过发送方调用接收方的操作来实现。图 1展示了同步消息的发送及返回过程。

图 1 同步消息

发送方向接收方发送同步消息后需要等待返回结果,但这并不意味着发送方必然被阻止发送或接收其他消息,UML序列图允许非阻塞的同步行为。建模者务必明白,序列图中的参与者不是实例而是角色,因而发送方可能有多个部分或包含线程,而当前等待可能只是阻塞其中的一个。

如果发送的同步消息已经可以明确其返回消息的信息,或者在当前所表达的行为中不需要特意表达返回消息时,在序列图中可以省略返回消息的描画。

如果建模的是一个概念性的序列图,那么同步消息仅仅意味着发送者确保接收者收到了消息。否则,它表示发送者正在调用接收者的一个操作,并且发送者将等待响应。消息名称放置在箭头上方,并遵循接收者定义的操作语法。被调用的操作必须是接收者"操作"的成员,或者是从接收者的超类中继承而来的。操作的参数可以根据场景给出适当的值。

异步消息

带有V形箭头的实现表示异步消息。发送异步消息时,发送方不会等待回复。而接收方必须是一个活动类,异步消息可以是硬件或软件中断。大多数基于Web的交互都是从浏览器到服务器的异步消息,随后是另一个方向的异步消息。

异步消息可以是异步方式调用的操作(许多编程语言提供了异步操作定义机制),也可以是发送的信号。由于无法回复,异步消息不可以有返回值或输出参数。图 2展示一个唤醒信号(Wakeup),信号只能有输入参数,可以将这些参数列在信号的独立分隔栏中。在图 2中,唤醒信号的参数是message:String。信号也可以在状态图和活动图中展示。

图 2 信号

图 3则展示了一个系统类。它是一个活动类(可选地通过双竖线边框表示)。在其单独分隔的"接收(RECEPTIONS)"栏中,展示该类可以接收的信号,形式上它类似操作的格式。在图 3中展示了唤醒(Wakeup)信号。

图 3 活动类

在序列图中使用信号的示例如图 4所示,生命线Lifeline1向System发送了一条异步消息,该消息为上述所定义的信号Wakeup。异步消息必须是接收者"接收"的成员,或者从接收者的超类中继承而来。

图 4 发送信号

如果建模的是一个概念性的序列图,那么异步消息仅仅意味着发送者不等待响应。

此外,接收者类必须是一个活动类,尽管一些建模者在建模时并不会特意将接收者使用表示"活动"的表示符号(即双竖线边框)。

自消息

自消息表示来自参与者自身的消息,可能是发送给其独立的内部部分或线程。自消息从一条生命线上发出并到达同一生命线。自消息可以是同步或异步的,建模时可以像同步消息或异步消息那样通过箭头类型进行区分。对于同步的自消息还可能存在类似同步消息的虚线返回箭头。

图 5所示的序列图在Lifeline1上展示了同步自消息,在Lifeline2上展示了异步自消息。

图 5 自消息

UML -- 光头颜说IThttps://gtyan.com/archives/category/uml

UML之序列图的参与者与生命线-CSDN博客

UML之扩展用例_将这两个用例扩展语议,扩展为"用例实现"-CSDN博客

UML之包含用例_一个包含第三方调用的用例图-CSDN博客

UML之泛化用例_用例图泛化-CSDN博客

UML之参与者(Actor)_uml actor-CSDN博客

UML之发现用例-CSDN博客

UML之泛化、特化和继承_uml中泛化-CSDN博客

UML之组合与聚合_uml聚合和组合-CSDN博客

UML之关联_uml 关联 包含 连线-CSDN博客

UML之集合类型-CSDN博客

UML之属性与参数的多重性_类图多重性-CSDN博客

UML之模型、包及包的版型(构造型)_包体系结构-CSDN博客

UML之包的导入与访问_uml的包使用-CSDN博客

UML之类型_在uml中,日期属于什么类型-CSDN博客

UML之修饰符_图框架标题类型之谬-CSDN博客

UML之类与类图-CSDN博客

UML之图框架标题类型之谬_框架标题是什么-CSDN博客

相关推荐
云知谷1 天前
【C/C++基本功】C/C++江湖风云录:void* 的江湖传说
c语言·开发语言·c++·软件工程·团队开发
木霖森772 天前
软件工程入门学习
学习·软件工程
曦樂~2 天前
4 信息收集&建模和工作流程
项目管理·软件工程
曦樂~3 天前
1系统分析与设计及 IT 项目管理
项目管理·软件工程
yours_Gabriel4 天前
【设计模式】UML和设计原则
java·设计模式·uml
郝学胜-神的一滴6 天前
深入解析C++命令模式:设计原理与实际应用
开发语言·c++·程序人生·软件工程·命令模式
紫金桥软件7 天前
组态软件和实时数据库区别大吗?
数据库·物联网·软件工程·scada·监控组态软件
HLJ洛神千羽8 天前
人机交互的软件工程方法实验报告(黑龙江大学)
人机交互·软件工程
文火冰糖的硅基工坊8 天前
[人工智能-大模型-97]:大模型应用层 - 随着技术的发展,软件工程与软件开发过程提效演进阶段(工具化 → 流程化 → 智能化)和未来的展望。
人工智能·软件工程
张较瘦_9 天前
[论文阅读] AI + 软件工程 | 从“能用”到“耐用”:LLM生成软件的老化陷阱与研究突破
论文阅读·人工智能·软件工程