4

我正在研究 UML 序列图并且遇到了方法调用,所以我注意到有两种方法可以调用统一建模语言(UML)中的方法行为,即信号和消息,但我不知道如何指定其中一个并基于什么?我的意思是何时使用消息以及何时使用信号,因为我认为这是一个非常重要的设计决策,应该很好地选择?

4

2 回答 2

3

实际上是这样,但我认为您使用的术语不是很准确(消息和信号)。序列图中两个对象之间的所有类型的通信都被认为是一个消息

但是,有两种基本类型的消息 -同步和异步

通常的方法调用,当方法调用者等待阻塞直到方法执行结束时是同步调用,即同步消息。调用者将从被调用方法接收返回值并继续其自己的执行。因此,这里只有一个执行线程。

还有一种异步通信,当一个对象以某种方式向另一个对象发送消息并立即继续执行而无需等待时。例如 SMS 消息、UDP 包发送等。这里有两个独立的执行线程。

通过一个信号,它经常被提及——异步消息发送。

于 2014-05-10T16:33:29.573 回答
0

Kirill Fakhroutdinov 的页面http://www.uml-diagrams.org/sequence-diagrams.html将消息解释为

按操作类型划分的消息

..消息反映了操作调用和执行开始或信号的发送和接收...

除了消息的同步/异步性质外,它还指向活动图中使用的“发送信号动作”

异步信号

..异步信号消息对应异步发送信号动作..

对我来说,建模消息与信号的一个重要区别是单播/多播(广播)语义。信号可以从一个地方发送(包含所有必要的参数)并在多个地方接收

序列图允许使用找到的消息丢失的消息概念对多播行为进行建模

(我不是 100% 确定,但我相信我已经接近了)


编辑:添加对支持我的论点的更正式解释的引用,即信号与单播/多播(广播)有关,作为对@Aleks 评论的回应

James Rumbaugh、Ivar Jacobson、Grady Booch所著的“统一建模语言参考手册”一书,版权所有 © 1999,Addison Wesley Longman, Inc.解释了消息和信号之间的区别,例如使用以下词语

消息..语义

..消息是从一个对象(发送者)向一个或多个其他对象(接收者)发送信号,或者是另一个对象(发送者或发送者)对一个对象(接收者)的操作调用呼叫者)。消息的实现可能有多种形式......

信号事件

.. 一个信号有一个明确的参数列表。它由一个对象显式发送到另一个对象或一组对象。事件的一般广播可以看作是向所有对象的集合发送信号,尽管..

.. 信号是对象可以异步相互通信的显式方法。要进行同步通信,必须使用两个异步信号,每个通信方向一个。

编辑:添加 3 种不同的消息符号,因为它们由 Enterprise Architect 可视化

请注意,由于信号的异步和多播性质(如上所述),相应的符号不包括“返回值”部分

Enterprise Architect 支持的 3 种不同的消息类型

于 2014-05-11T05:10:31.503 回答