第4章 顺序图和协作图
4.3.5 消息的语法格式
□ UML中规定的消息语法格式如下: [predecessor] [guard-condition] [sequenceexpression] [return-value := ] message-name([argument-list])
4.3.5 消息的语法格式
□ 上述定义中用方括号括起来的是可选部分,各语 法成分的含义如下。 □ predecessor:必须先发生的消息的列表。其中消息 列表中的各消息号用逗号分隔,格式如下: sequence-number ','... '/' guard-condition:警戒条件,是一个在方括号中的布 尔表达式,表示只有在guard-condition满足时才能 发送该消息。格式如下: '[' Boolean-expression ']' □ 这里的方括号放在单引号中,表示这个方括号是 一个字符,是消息的组成部分。
4.7 顺序图和协作图的比较
□ 和协作图相比,顺序图在表示算法、对象 的生命期、具有多线程特性的对象等方面相 对来说更容易一些,但在表示并发控制流方 面会困难一些。
4.7 顺序图和协作图的比较
□ 顺序图和协作图在语义上是等价的,两者 之间可以相互转换,但两者并不能完全相互 代替。顺序图可以表示某些协作图无法表示 的信息,同样,协作图也可以表示某些顺序 图无法表示的信息。例如,在顺序图中不能 表示对象与对象之间的链,对于多对象和主 动对象也不能直接显示出来,在协作图中则 可以表示;协作图不能表示生命线的分叉, 在顺序图中则可以表示。
: Driver oper() : Car
: Driver oper() : Car
4.3.3 返回消息
□ 返回(return)消息表示从过程调用返回。 如果是从过程调用返回,则返回消息是隐含 的,所以返回消息可以不用画出来。对于非 过程调用,如果有返回消息,必须明确表示 出来。如图4.9所示是返回消息的表示符号, 其中的虚线箭头表示对应于oper()这个消息 的返回消息。
4.3.5 消息的语法格式
[integer |name ] [recurrence] □ 其中integer表示消息序号,name表示并发 的控制线程。例如,如果两个消息为3.1a, 3.1b,则表示这两个消息在激活期3.1内是并 发的。recurrence表示消息是条件执行或循 环执行,有几种格式: '*' ['[' iteration-clause ']'] 表示消息要循环发送。 '[' condition-clause ']' 表示消息要根据条件发送的。
4.3.1 调用消息
□ 调用(procedure call)消息的发送者把控 制传递给消息的接收者,然后停止活动,等 待消息接收者放弃或者返回控制。
: Driver oper() : Car
图4.6 调用消息
4.3.2 异步消息
□ 异步(asynchronous)消息的发送者通过消 息把信号传递给消息的接收者,然后继续自 己的活动,不等待接收者返回消息或控制。 异步消息的接收者和发送者是并发工作的。
4.9 常见问题分析
【例2】如何在顺序图中表示消息的条件发送? 答:表示消息的条件发送可以有下面几种方法: ① 在消息上加警戒条件。 ② 在消息名字前加条件子句。 ③ 使用文字说明。 ④ 分成多个顺序图。
4.3.5 消息的语法格式
sequence-expression:消息顺序表达式。消息 顺序表达式是用句点“.”分隔、以冒号“:” 结束的消息顺序项(sequence-term)列表, 格式如下: sequence-term '.' …':' □ 其中可能有多个消息顺序项,各消息顺序 项之间用句点(“.”)分隔,每个消息顺序 项的语法格式为:
objectName : ClassName : ClassName objectName
显示对象名和类名
只显示类名
只显示对象名
图4.2 顺序图中对象的命名方式
4.2 顺序图
□ 生命线在顺序图中表示为从对象图标向下 延伸的一条虚线,表示对象存在的时间,如 图4.3所示。
Driver
图4.3 生命线
□ 在分析和设计过程中,建立顺序图并没有 一个标准的步骤,下面给出的步骤只是指导 性原则: (1) 确定交互过程的上下文(context)。 (2) 识别参与交互过程的对象。 (3) 为每个对象设置生命线,即确定哪些对 象存在于整个交互过程中,哪些对象在交互 过程中被创建和撤销。
4.4 建立顺序图的步骤
: Robot
active
4.6 建立协作图的步骤
□ 在分析和设计过程中,建立协作图并没有 一个标准的步骤,下面给出的步骤只是指导 性的原则: (1)确定交互过程的上下文(context)。 (2)识别参与交互过程的对象。 (3)如果需要,为每个对象设置初始特性。 (4)确定对象之间的链(link),以及沿着 链的消息。
4.3.4 阻止消息和超时消息
□ 超时消息是指消息发送者发出消息给接收 者并按指定时间等待。如果接收者无法在指 定时间内接收消息,则发送者放弃这个消息。 如图4.11所示是超时消息的例子。
: Driver : Car : Driver oper() : Car
oper()
图4.10 阻止消息
图4.11 超时消息
4.3 顺序图中的消息
□ 顺序图中的一个重要概念是消息。消息也 是UML规范说明中变化较大的一个内容。 UML在1.4及以后版本的规范说明中对顺序 图中的消息做了简化,只规定了调用消息、 异步消息和返回消息这3种消息,而在 UML1.3及以前版本的规范说明中还有简单 消息这种类型。此外Rose对消息又做了扩充, 增加了阻止(balking)消息、超时(timeout)消息等。
4.3.3 返回消息
: Driver
: Car
oper()
4.3.4 阻止消息和超时消息
□ 除了调用消息、异步消息和返回消息这3种 消息外,Rose还对消息类型做了扩充,增加 了阻止消息和超时消息。 □ 阻止消息是指消息发送者发出消息给接收 者,如果接收者无法立即接收消息,则发送 者放弃这个消息。Rose中用折回的箭头表示 阻止消息,如图4.10所示。
4.3.5 消息的语法格式
□ 例如下面的两个子句分别表示消息要循环 发送或条件发送: * [i:=1..n] * [x>y]
4.3.5 消息的语法格式
return-value:将赋值为消息的返回值的名字 列表。如果消息没有返回值,则return-value 部分被省略。 message-name:消息名。 argument-list:消息的参数列表。
第4章 顺序图和交互图
4.1 交互图概述
○ 交互图 用来描述对象之间以及对象与参与者之 间的动态协作关系以及协作过程中行为次序的图 形文档。 顺序图 着重描述对象按照时间顺序的消息交换 协作图 着重描述系统成分如何协同工作
4.2 顺序图
○ 定义 顺序图是显示对象之间交互的图,这 些对象之间是按时间顺序排列的。 · 水平方向 对象维 · 垂直方向 时间维
表4.1是一些消息的例子。
2:display(x, y) 1.3.1:p:=find(specs) [x<0] 4:invert(x, color) 3.1 * :update() 简单消息 嵌a, b)
线程间同步
4.4 建立顺序图的步骤
4.6 建立协作图的步骤
(5)从引发这个交互过程的初始消息开始, 将随后的每个消息附到相应的链上。 (6)如果需要表示消息的嵌套,则用Dewey 十进制数表示法。 (7)如果需要说明时间约束,则在消息旁边 加上约束说明。 (8)如果需要,可以为每个消息附上前置条 件和后置条件。
4.7 顺序图和协作图的比较
:Driver :Car
oper()
4.1 顺序图
4.2 顺序图
□ 顺序图中包括的建模元素有:对象(参与 者实例也是对象)、生命线(lifeline)、控 制焦点(focus of control FOC)、消息 (message)等。
4.2 顺序图
□ 顺序图中对象的命名方式主要有3种(协作 图中的对象命名方式也一样),如图4.2所 示:
4.2 顺序图
□ 控制焦点是顺序图中表示时间段的符号, 在这个时间段内,对象将执行相应的操作。 控制焦点表示为在生命线上的小矩形,如图 4.4所示。
: Driver oper() : Car
图4.4 控制焦点
4.2 顺序图
□ 另外与控制焦点相关的概念是激活期 (activation)。激活期表示对象执行一个动 作的期间,即对象激活的时间段。根据定义 可以知道,控制焦点和激活期事实上表示的 是同一个意思。
4.8 工具支持
□ 制定UML规范说明的一个目的就是为了有 利于UML支持工具的开发,以吸引更多的 开发商提供与UML有关的工具。Booch在 [BRJ99]中对一些可能出现的工具进行过分 析,认为以下两种类型的工具是迫切需要的, 也是将来最有可能出现的。
4.8 工具支持
□ 第一种类型的工具是支持模型以动画方式执行, 这样在分析和设计阶段就能发现系统中可能存在 的问题。事实上,目前已出现了一些支持UML模 型以动画方式执行的工具,如iUML (/products/iuml)。当然,一些 工具在提供动画支持时,对UML做了一些扩充, 增加了一些动作语义(action semantics),有关动 作语义的部分也是UML规范说明2.0中重点考虑的 一个内容。
□ 顺序图和协作图都属于交互图,都用于描 述系统中对象之间的动态关系。两者可以相 互转换,但两者强调的重点不同。顺序图强 调的是消息的时间顺序,而协作图强调的是 参与交互的对象的组织。在两个图所使用的 建模元素上,两者也有各自的特点。顺序图 中有对象生命线和控制焦点,协作图中没有; 协作图中有路径,并且协作图中的消息必须 要有消息顺序号,但顺序图中没有这两个特 性。