UML的组成主要有:事物、图和关系。事物是UML中重要的组成部分。关系把元素紧密联系在一起。图是很多有相互关系的事物的组。
UML包含4种事物:构件事物、行为事物、分组事物和注释事物。
(1)构件事物
构件事物是UML模型的静态部分、描述概念或物理元素,它包括以下几种。
① 类
类是对一组具有相同属性、相同操作、相同关系和相同语义的对象的抽象。在UML中类是用一个矩形表示的,它包含三个区域,最上面是类名,中间是类的属性,最下面是类的方法。
② 接口
接口是指类或组件提供特定服务的一组操作的集合,因此,一个接口描述了类或组件的对外可见的动作。一个接口可以实现类或组件的全部动作,也可以只实现一部分。接口在UML 中被画成一个圆和它的名字。
③ 协作
协作描述了一组事物间的相互作用的集合。
④ 用例
用例用于描述一系列的动作,这些动作是系统对一个特定角色执行。在模型中用例是通过协作来实现的。在UML 中,用例画为一个实线椭圆,通常还有它的名字。
⑤ 构件
构件也称为 “ 组件 ” ,是物理上可替换的系统部分,它实现了一个接口集合。在一个系统中,可以使用不同种类的组件,例如COM+ 或Java Beans。
⑥ 节点
为了能够有效地对部署的结构进行建模,UML引入了节点这一概念,它可以用来描述实际的PC机、打印机、服务器等软件运行的基础硬件。节点是运行时存在的物理元素,它表示了一种可计算的资源,通常至少有存储空间和处理能力。
此外,参与者、文档库、页表等都是上述基本事物的变体。
(2)行为事物
行为事物是UML模型图的动态部分,描述跨越空间和时间的行为,主要包括以下两部分。
① 交互
交互是指实现某功能的一组构件事物之间的消息的集合,涉及消息、动作序列、链接。
② 状态机
状态机用于描述事物或交互在生命周期内响应事件所经历的状态序列。
(3)分组事物
分组事物是UML模型图的组织部分,用于描述事物的组织结构,主要由包来实现。 包:把元素编成组的机制。
(4)注释事物
注释事物是UML模型的解释部分,用来对模型中的元素进行说明、解释。
注解:对元素进行约束或解释的简单符号。
在UML中有4种关系:依赖、关联、泛化和实现。
(1)依赖(Dependency)
依赖是两个模型元素间的语义关系,其中一个元素(独立元素)发生变化会影响另一个元素(依赖元素)的语义。在图形上,把依赖画成一条可能有方向的虚线,偶尔在其上还带有一个标记,如图1.1所示。
图1.1 依赖
(2)关联(Association)
关联指明了一个对象与另一个对象间的关系。在图形上,关联用一条实线表示,它可能有方向,偶尔在其上还有一个标记。例如,读者可以去图书馆借书和还书,图书管理员可以管理书籍,也可以管理读者的信息,显然在读者、书籍、管理员之间存在着某种联系。那么在用UML设计类图的时候,就可以在读者、书籍、管理员三个类之间建立关联关系,如图1.2所示。
图1.2 关联
(3)泛化(Generalization)
泛化是一种一般化——特殊化的关系,是一般事物(父类)和该事物较为特殊的种类(子类)之间的关系,子类继承父类的属性和操作,除此之外,子类还添加新的属性和操作。在图形上,把泛化关系画成带有空心箭头的实线,该实线指向父类,如图1.3所示。
图1.3 泛化
(4)实现(Realization)
实现是类之间的语义关系,其中的一个类指定了由另一个类必须执行的约定。在两种地方会遇到实现关系:一种是在接口和实现它们的类或构件之间;另一种是在用例和实现它们的协作之间。在图形上,把实现关系画成一条带有空心箭头的虚线,它是泛化和依赖关系两种图形的结合,如图1.4所示。
图1.4 实现
UML中的图是描述UML视图内容的图形。对比UML 1.x,UML 2.0增加了“包图”、 “ 组合结构图”、“交互概览图”和“定时图”,一共13种不同的图,通过它们的相互组合提供被建模系统的所有视图。UML 2.0在可视化建模方面进行了许多改革和创新。它可以描述现今软件系统中存在的许多技术,例如模型驱动架构(MDA)和面向服务的架构(SOA)。
1. 用例图
用例图是从用户角度描述系统功能,并指出各功能的操作者。用例图是UML中最简单也是最复杂的一种图。说它简单是因为它采用了面向对象的思想,基于用户角度来描述系统,绘制非常容易,图形表示直观并且容易理解。说它复杂是因为用例图往往不容易控制,要么过于复杂,要么过于简单。用例图展示了一组用例、参与者以及它们之间的关系。如图1.5所示。
图1.5 用例图
用例图中的主体内容(用例、参与者、关联)并没有变化。在UML 1.x中,只能用用例图所归属的包来表达一组用例的逻辑组织关系,即用用例在模型中所处的物理位置表达逻辑组织关系。在UML 2.0中,为每个用例增加了一个称为 “ Subject ” 的特征,这项特征的取值可以作为在逻辑层面划分一组用例的一项依据。用例所属的 “ 系统边界”就是 “ Subject ” 的一种典型例子。
2. 类图
类图是UML面向对象中最常用的一种图,类图可以帮助我们更直观地了解一个系统的体系结构。通过关系和类表示的类图,可以图形化地描述一个系统的设计部分,如图1.6所示。
图1.6 类图
3. 对象图
在面向对象中对象图是类图的实例,几乎使用与类图完全相同的标识。它们的不同点在于对象图显示类的多个对象实例,而不是实例的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统的某一时间段存在。
4. 状态机图
状态机图用于描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应的,如图1.7所示。
图1.7 状态机图
5. 活动图
在面向对象中活动图记录了单个操作、方法的逻辑,或者单个业务流程的逻辑,描述系统中各种活动的执行顺序,通常用于描述一个操作中所要进行的各项活动的执行流程。同时,它也常被用来描述一个用例的处理流程,或者某种交互流程。
活动图由一些活动组成,图中同时包括了对这些活动的说明。当一个活动执行完毕之后,将沿着控制转移箭头转向下一个活动。活动图中还可以方便地描述控制转移的条件以及并行执行等要求,如图1.8所示。
活动图是比较常用的一种图,接近于流程图。在UML 2.0中,活动图增加了许多新特性。例如泳道可以划分成层次,增加丰富的同步表达能力,在活动图中引入对象等特性。
图1.8 活动图
6. 顺序图
顺序图描述了对象之间动态的交互关系,主要体现对象之间进行消息传递的时间顺序。
顺序图由一组对象构成,每个对象分别带有一条竖线,称作对象的生命线,它代表时间轴,时间沿竖线向下延伸,顺序图描述了这些对象随着时间的推移相互之间交换消息的过程。消息利用从一个对象的生命线指向另一个对象的生命线的水平箭头表示。图中还可以根据需要增加有关时间的说明和其他注释,如图1.9所示。
图1.9 顺序图
对于顺序图,UML 2.0主要做了如下改进。
允许顺序图中明确表达分支判断逻辑,这样能够将以前要通过两张图才能表达的意思通过一个图就表达,但这并不意味着顺序图擅长表达这种逻辑,所以并不需要在顺序图中展现所有的分支判断逻辑。
允许“纵向”与“横向”地对顺序图进行拆分与引用,这样就解决了以前一张图由于流程过多造成幅面过大,浏览不方便的困难。
7. 通信图
在面向对象中通信图用于显示组件及其交互关系的空间组织结构,它并不侧重于交互的顺序。通信图显示了交互中各个对象之间的组织交互关系以及对象彼此之间的链接。与顺序图不同,通信图显示的是对象之间的关系,而且通信图没有将时间作为一个单独的维度,因此序列号就决定了消息及并发线程的顺序。它用带有编号的箭头来描述特定的方案,以显示在整个方案过程中消息的移动情况。通信图主要用于描绘对象之间消息的移动情况来反映具体的方案,显示对象及其交互关系的空间组织结构,而非交互的顺序。如图1.10所示。
图1.10 通信图
8. 构件图
构件图,也称为组件图。构件图描述代码部件的物理结构及各部件之间的依赖关系,构件图有助于分析和理解部件之间的相互影响程度。从构件图中,可以了解各软件组件(如源代码文件或动态链接库)之间的编译器和运行时依赖关系。使用构件图可以将系统划分为内聚组件并显示代码自身的结构,如图1.11所示。
图1.11 构件图
构件图是在物理层面对系统结构及内容的直观描述,最接近于通常意义上的模块结构图。
在UML 2.0中,构件图有比较明显的改进。组件本身内容的表述更清晰,包括组件所提供的接口、所要求的接口、组件之间的依赖关系,通过 “ 组装连接器”(Assembling Connector)更加明确地表达等。
9. 部署图
部署图,也称为配置图,用于描述系统中硬件和软件的物理配置情况和系统体系结构。
在部署图中,用结点表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,并说明其连接方式。在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行,如图1.12所示。
图1.12 部署图
10. 包图
“包图”展现模型要素的基本组织单元,以及这些组织单元之间的依赖关系,包括引用关系(PackageImport)和扩展关系(PackageMerge)。在通用的建模工具中,一般可以用类图描述包图中的逻辑内容,如图1.13所示。
图1.13 包图
11. 组合结构图
“ 组合结构图”用于描述系统中的某 一 部分(即“组合结构”)的内部内容,包括该部分与系统其他部分的交互点,这种图能够展示该部分内容 “ 内部”参与者的配置情况。
“ 组合结构图”中引入了一些重要的概念。例如, “ 端口”(Port), “ 端口”将组合结构与外部环境隔离,实现了双向的封装,既涵盖了该组合结构所提供的行为(PrrovidedInterface),同时也指出了该组合结构所需要的服务(RequiredInterface);如“协议”(protocol),基于UML中的“协作 ” (collaboration)的概念,展示那些可复用的交互序列,其实质目的是描述那些可以在不同上下文环境中复用的协作模式。“协议”中所反映的任务由具体的 “ 端口”承担,如图1.14所示。
图1.14 组合结构图
12. 定时图
“定时图”是一种可选的交互图,展示交互过程中的真实时间信息,具体描述对象状态变化的时间点以及维持特定状态的时间段,如图1.15所示。
图1.15 定时图
13. 交互概览图
“交互概览图”(InteractionOverviewDiagram)与活动图类似,只是将活动图中的动作元素改为交互概览图的交互关系。如果概览图内的一个交互涉及时序,则使用顺序图;如果概览图中的另一个交互需要关注消息次序,则可以使用顺序图。交互概览图将系统内单独的交互结合起来,并针对每个特定交互使用最合理的表示法,以显示出它们是如何协同工作来实现系统的主要功能,如图1.16所示。
顺序图、通信图和定时图主要关注特定交互的具体细节,而交互概览图则将各种不同的交互结合在一起,形成针对系统某种特定要点的交互整体图。
图1.16 交互概览图
上述13种图可归纳为5类,如表1.1所示。
表1.1 UML图分类
从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图、包图、对象图、组合结构图、构件图和部署图等7个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态机图、活动图、顺序图、通信图、定时图和交互概览图等6个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。