图 (Diagram) 是一组元素的图形表示,大多数情况下把图画成顶点 (代表事物) 和弧 (代表关系) 的连通图。为了对系统进行可视化,可以从不同的角度画图,这样图是对系统的投影
UML 2.0 提供了 13 种图,分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时图。序列图、通信图、交互概览图和计时图均被称为交互图
(一) 类图
类图 (Class Diagram) 展现了一组对象、接口、协作和它们之间的关系。在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图
类图中通常包括下述内容:
- 类
- 接口
- 协作
- 依赖、泛化和关联关系
例如:
Student |
---|
+id: int -name: String #age: int |
~borrow(): bool |
+: public
-: private
#: protected
~: package
类图中也可以包含注解和约束。类图还可以含有包或子系统,二者都用于把模型元素聚集成更大的组块
类图用于对系统的静态设计视图建模。这种视图主要支持系统的功能需求,即系统要提供给最终用户的服务。当对系统的静态设计视图建模时,通常以下述 3 种方式之一使用类图
- 对系统的词汇建模
- 对简单的协作建模
- 对逻辑数据库模式建模
(二) 对象图
对象图 (Object Diagram) 展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链
对象名:类名 |
---|
属性 |
和类图一样,对象图给出系统的静态设计视图或静态进程视图
(三) 用例图
用例图 (Use Case Diagram) 展现了一组用例、参与者 (Actor) 以及它们之间的关系
用例图通常包含以下内容:
- 用例
- 参与者
- 用例之间的拓展关系
<<extend>>
和包含关系<<include>>
,参与者和用例之间的关联关系,用例与用例以及参与者与参与者之间的泛化关系
- 包含关系
一个用例包含另一个用例
基本用例 –<<include>>
–> 被包含用例
- 扩展关系
一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例
扩展用例 –<<extend>>
–> 基本用例
用例图用于对系统的静态用例视图进行建模。这个视图主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务
当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图
- 对系统的语境建模
- 对系统的需求建模
(四) 交互图
交互图用于对系统的动态方面进行建模。一张交互图表现的是一个交互,由一组对象和它们之间的关系组成,包含它们之间可能传递的信息。交互图表现为序列图、通信图、交互概览图和计时图,每种针对不同的目的,能适用于不同的情况。序列图是强调消息时间顺序的交互图;通信图是强调接受和发生消息的对象的结构组织的交互图;交互概览图强调控制流的交互图
交互图一般包含对象、链和消息
序列图
序列图 (Sequence Diagram) 是场景 (Scenario) 的图形化表示,描述了以时间顺序组织的对象之间的交互活动。形成序列图时,首先把参加交互的对象放在图的上方,沿水平方向排列。通常把发起交互的对象放在左边,下级对象以此放在右边。然后,把这些对象发生和接收的消息沿着垂直方向按时间顺序从上到下放置。这样,就提供了控制流随时间推移的清晰的可视化轨迹
序列图有两个不同于通信图的特征
- 序列图有对象生命线。对象生命线是一条垂直的虚线,表示一个对象在一段时间内存在
- 序列图有控制焦点。控制焦点是一个瘦高的矩形,表示一个对象执行一个动作所经历的时间段,既可以是直接执行,也可以是通过下级过程执行。矩形的顶部表示动作的开始,底部表示动作的结束
通信图
通信图 (Communication Diagram) 强调收发信息的对象的结构组织,在早期的版本中也被称作协作图。通信图强调参加交互的对象的组织。产生一张通信图,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消息来修饰这些链。这就提供了在协作对象的结构组织的语境中观察控制流的一个清晰的可视化轨迹
通信图有两个不同于序列图的特性
- 通信图有路径。为了指出一个对象如何与另一个对象链接,可以在链的末端附上一个路径构造型
- 通信图有顺序号。为表示一个消息的时间顺序,可以给消息加一个数字前缀,在控制流中,每个新消息的顺序号单调增加。为了使用嵌套,可使用带小数点的号码
序列图和通信图是同构的,它们之间可以相互转换
(五) 状态图
状态图 (State Diagram) 展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序
状态图通常包括简单状态和组合状态、转换 (事件和动作)
状态
状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态规定了系统对事件的响应方式。系统对事件的响应,既可以是做一个 (或一系列) 动作,也可以是仅仅改变系统本身的状态,还可以是既改变状态,又做动作
在状态图中定义的状态主要有:初态 (即初始状态) 、终态 (即最终状态) 和中间状态。初态用一个黑圆点表示,终态用黑圆点外加一个圆表示,状态图中的状态用一个圆角四边形表示
状态之间为状态转换,用一条带箭头的线表示。带箭头的线上的事件发生时,状态转换开始。一张状态图中只能有一个初态,而终态可以没有,也可以有多个
三种标准事件:
- entry: 入口动作,进入状态,立即执行
- exit: 出口动作,退出状态,立即执行
- do: 内部活动,占有有限时间,并可以中断的工作
以上图例:
- entry/turnON: 当转入该状态时,做开灯动作
- do/blinkFivetimes: 当处于该状态时,灯闪烁 5 次
- exit/turnOFF: 当转出该状态时,做关灯动作
事件与转换
事件是在某个特定时刻发生的事情,它是对引起系统做动作或 (和) 从一个状态转换到另一个状态的外界事件的抽象。例如,观众使用电视遥控器,用户移动鼠标、单机鼠标等都是事件。简而言之,事件就是引起系统引起系统做动作或 (和) 转换状态的控制信息
状态变迁通常是由事件触发的,在这种情况下,应在表示状态转换的箭头上标出触发转换的事件表达式
如果在箭头线上未标明事件,则表示在源状态的内部活动执行完之后自动触发转换,事件表达式的语法如下
事件说明[监护条件]动作表达式
其中,事件说明的语法为:事件名(参数表)
监护条件 (或者守护条件) 是一个布尔表达式。如果同时使用事件说明和监护条件,则当且仅当事件发生且布尔表达式为真时,状态转换才发生。如果只有监护条件没有事件说明时,则只要守卫条件为真,状态转换就发生
转换包括两个状态 (原状态,目标状态) 事件,监护条件,动作
事件触发转换 (迁移)
活动 (动作) 可以在状态内执行,也可以在状态转换 (迁移) 时执行
完整图
可以用状态图对系统的动态方面建模。这些动态方面可以包括出现在系统体系结构的任何视图中的任何一种对象的按事件排序的行为,这些对象包括类 (各主动类) 、接口、构件和结点
当对系统、类或用例的动态方面建模时,通常是对反应型对象建模
(六) 活动图
活动图 (Activity Diagram) 是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。活动图专注于系统的动态视图,它对于系统的功能建模特别重要,并强调对象间的控制流程
活动图一般包括活动状态和动作状态、转换和对象
活动图可以表示分支、合并、分岔和汇合
当对一个系统的动态方面建模时,通常有两种使用活动图的方式
- 对工作流建模
- 对操作建模
(七) 构件图
构件图 (Component Diagram) 展现了一组构件之间的组织和依赖。构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作
(八) 部署图
部署图 (Deployment Diagram) 是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件 (制品) 的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。通常,一个结点是一个在运行时存在并代表一项计算资源的物理元素,至少拥有一些内容,常常具有处理能力,包含一个或多个构件。其中 <<artifact>>
表示制品
总结
-
静态建模:类图、对象图、用例图
-
动态建模:序列图 (顺序图,时序图) 、通信图 (协作图) 、状态图、活动图
-
物理建模:构件图 (组件图) 、部署图
交互图:序列图 (顺序图,时序图) 、通信图 (协作图)