1
面向对象软件工程实践指南
1.2.3.6 3.6 动态建模机制模型图
3.6 动态建模机制模型图

3.6.1 状态图(statechart diagram)

状态是对对象属性值的一种抽象,各个对象之间的相互作用引起了一系列的状态变化。状态图是通过对象的生命周期建立来刻画对象随着时间变化的状态行为。状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成,表现从一个状态到另一个状态的控制流。状态图的组成包含状态、转换、初始状态、终止状态以及判定。

状态由一个圆角矩形表示。初始状态是一个实心的圆,一个状态图只能包含一个初始状态,终止状态是用套有实心圆的空心圆表示,一个状态图可以包含多个终止状态。状态图中的判定用空心菱形表示。图3-8是教室的状态图的例子。

图3-8 教室的状态图

3.6.2 活动图(activity diagram)

活动是某事件正在进行的状态。将各种活动以及它们之间的转换用图形表示,就构成了活动图。活动图是描述过程逻辑、业务流程和工作流的技术,能够对系统的行为建模。活动图是状态图的一种特殊形式,描述了从活动到活动的控制流。与状态图类似,活动图也包含起点、终点和判定。

活动图的图形表示中,条件行为用分支与合并表达(空心菱形),并发控制流用分叉与汇合表达(加粗的水平线)。图3-9表示了教室预订系统中的一个活动图。

图3-9 教室预订系统的活动图

3.6.3 顺序图(sequence diagram)

顺序图是一种强调时间顺序的交互图(interaction diagram),其展示用例内部的许多对象以及这些对象之间传递的消息。其中对象沿横轴方向排列,消息沿纵轴方向排列。如图3-10所示的教室预订系统的顺序图。顺序图中的对象生命线是一条垂直的虚线,表示对象在一段时间内存在。由于顺序图中大多数对象都存在于整个交互过程中,因此对象全部排在图的顶部,生命线从图的顶部画到图的底部。每个对象下方有一个矩形条,表示对象的控制焦点。

图3-10 教室预订系统的顺序图

需要注意状态图与顺序图的差别。状态图针对的是单个类,刻画了类的对象在整个生命期内可能历经的状态变化。顺序图针对的是多个类的对象,它们协作完成整个用例流程。

3.6.4 通信图(communication diagram)

在UML2.0之前的版本,通信图称为协作图(collaboration diagram)。通信图也是交互图的一种,与序列图类似,也是描述对象或者类之间的关联以及消息通信。但是序列图强调的是交互的时间次序,而通信图强调的是交互的空间结构,侧重于对象在参与具体的交互时,对象之间的数据链接。两者在语义上是等价的,可以相互转换。

通信图的构成主要涉及对象、链接和消息三部分。与顺序图不同的是,通信图把每个参与者画成生命线并按垂直方式展示消息序列,通信图是允许自由放置参与者,通过画链接来展示参与者如何链接,并使用编号来展示消息序列。

图3-11展示了与图3-10同一用例的通信图。

图3-11 教室预订系统的通信图

3.6.5 其他图

在UML2.0中还提供了另外的模型图,即交互概览图(interaction overview diagram)和时间图(time diagram)。

交互概览图是活动图和交互图的结合,目标是概述交互元素之间的控制流。交互概览图的主要元素是框、控制流元素和交互图元素。交互概览图以活动图作为主线,即图的主体是活动图,活动图中的部分节点可以是一个交互片段,该片段可以展开为交互图。

时间图也是一种交互图,其焦点是针对单个对象或一组对象的时间约束。在UML2.0中时间图的许多元素也出现在其他UML模型图中,如生命线、对象、状态、消息等。时间图利用了UML的元素,以一种不同的组织方式呈现给用户。对于图中的每个对象,时间图有一条或多条生命线。