EA&UML日拱一卒-活动图::Signal,Event和Trigger
在 运用序列图(Sequence Diagram),活动图(Activity Diagram)和状态图(State Diagram)的时候,会遇到Signal(信号),Event(时间)和Trigger(触发)的概念。它们经常在同一个场景中出现,一下子还真不容 易看出区别来。
还是老规矩:看看UML规范中是怎么说的。下面的描述结合了《GB/T 28174.2-2011 统一建模语言(UML) 第2部分:上层结构》和《OMG Unified Modeling LanguageTM (OMG UML), Superstructure Version 2.4.1》中的内容。
Signal(信号)
信号是通讯对象间的发送请求实例的类型规格说明,接受对象按照它的接收规格说明来处理信号实例。引起请求的发送调用事件发生时,承载发送请求的数据表示为信号的属性。信号的定义独立于处理该信号的类目。
Event(事件)
事件定义了某些可能造成影响的事情的发生。
Trigger(触发条件)
触发条件指定了了可以引起相关联行为执行的事件。事件可能引起某个行为的执行。触发条件在指定可能引起行为执行的事件的同时,也会过滤掉不感兴趣的事件,就像事件的约束一样。
注:原翻译为【触发】,但是语义不够明确,以下统一翻译为【触发条件】。
也不知道为什么,技术文献翻译成中文以后就是这么难理解,我们以十字路口发生的事情来举例说明:
-
作为设备的“红灯,绿灯,黄灯”就是Signal
-
“红灯亮了,绿灯亮了”就是Event
-
交通规则讲:"红灯停,绿灯行“。含义其实是“如果发生了【红灯亮了】的情况的话就要停止,如果发生了【绿灯亮了】的情况的话就可以前进”,这里条件句就是Trigger了。
自己对照UML规范中的描述再捋一遍吧。
下面是《OMG Unified Modeling LanguageTM (OMG UML), Superstructure Version 2.4.1》中关于Signal,Event和Trigger之间联系的类图。
从Trigger图中可以看到,可以有多个Trigger监视同一个Event,但每个Trigger只能监视一个。
从上图可以看出Event首先分为MessageEvent和ChangeEvent两大类,其中SignalEvent是MessageEvent的子类。它与一个信号关联。