我正在研究一个UML序列图,我遇到了方法调用,所以我注意到有两种方法可以调用统一建模语言(UML)中的方法行为,即信号和消息,但我不知道知道如何指定它们中的哪一个并基于什么?我的意思是何时使用消息以及何时使用信号因为我认为这是一个非常重要的设计决策并且应该被很好地选择?
答案 0 :(得分:2)
实际上是,但我认为你使用的术语不是非常精确(消息和信号)。序列图中两个对象之间的所有通信都被视为消息。
但是,有两种基本类型的消息 - 同步和异步。
通常的方法调用,当方法调用程序等待阻塞直到方法执行结束为同步调用时,同步消息。调用者将从调用的方法接收返回值并继续自己的执行。 因此,这里只有一个执行线程。
还有一个异步通信,当一个对象以某种方式将消息发送到另一个对象并立即继续执行而不等待。示例包括SMS消息,UDP包发送等。 这里有两个独立的执行线程。
通过信号,通常会发送异步消息。
答案 1 :(得分:0)
Kirill Fakhroutdinov的页面http://www.uml-diagrams.org/sequence-diagrams.html将消息解释为
按操作类型的消息
除了消息的同步/异步特性外,它还指向活动图中使用的“发送信号动作”
异步信号
..异步信号消息对应异步send signal action ..
对我来说,在消息与信号建模方面的一个重要区别是单播/多播(广播)语义。信号具体可以从一个地方发送(包含所有必要的参数)并在多个地方接收
序列图允许使用found message和lost message概念
对多播行为进行建模(我不是100%肯定,但我相信我很接近)
编辑:添加对更正式解释的引用支持我的观点,即信号与单播/多播(广播)有关,作为对@Aleks评论的回应
本书"The Unified Modeling Language Reference Manual" by James Rumbaugh, Ivar Jacobson, Grady Booch, Copyright © 1999 by Addison Wesley Longman, Inc.解释了消息和信号之间的区别,例如使用以下词语
Message..Semantics
..消息是信号发送 信号从一个对象(发件人)到一个或多个其他对象(接收者),或者是呼叫一个对象(接收者)对另一个对象(发送者或呼叫者)的操作。消息的实现可以采取各种形式......
信号事件
.. 信号具有明确的参数列表。它由对象显式发送到另一个对象或一组对象。事件的一般广播可以被视为向所有对象的集合发送信号,但是..
.. 信号是对象可以相互通信的强显方式异步。要执行同步通信,必须使用两个异步信号,每个通信方向一个..
编辑:添加3种不同的消息符号,因为它们是由Enterprise Architect可视化的
请注意,由于信号的异步和多播特性(如上所述),相应的符号不包括“返回值”部分