UML 概述

统一建模语言 UML 是说明、可视化、构造和文档软件系统语言,也是一种定义良好的、易于表达、 功能强大的通用建模语言,它提供了一种机制使得不同的开发人员之间可以有效地共享和交流。

UML 提供了多种图。一个图就是系统架构在某一方面的表示,每一种 UML 的视图就是由一个或多个图组成, 所有的图共同组成系统的一组完整视图,这组视图被称为一个模型(Model)。模型是对现实系统的一种抽象, 反映了现实系统中最主要的方面,是理解、分析、开发现实系统的一种最常用方式。

UML 提供的基本的图形:

类型 包含的图
静态图 类图、对象图、包图
行为图 状态图、活动图
用例图 用例图
交互图 序列图、合作图
实现图 组件图、部署图

UML 的常用图

类图(Class Diagrams)

类图是 UML 中最基本的图。它既可以描述类和接口,也可以表示类之间关系。

图 1 描述类和接口的类图表示

图一左边的图用 UML 表示一个类 Person。矩形方框代表类的图标。它被分为 3 个区域: 最上面的区域是类名,中间区域是类的属性,最下面的区域是类的操作。右边的图表示 接口,区别仅仅是类名上要加 interface

类名如果是正体字,表明类是具体的(Concrete),即可以实例化的类;如果类是斜体, 表明类是抽象的,并且类名是不可省略的。

在属性层,一个属性可以是 private,public,protected。类的属性左边如果是 + ,表示 该属性是 public;如果是 - ,表示它是 private;如果是 # ,表示它是 protected。如果 是 ~ ,表示它是 implementation。 第三个区域方法名的左边的符号与属性相同,括号里是方法参数,冒号后面是方法的返回值。

如果方法或者属性是 static,下面就会有下划线。如果方法是抽象的,则用的斜体描述。

类之间的关系也可以用 UML 表示。 泛化关系是类于类之间的继承关系。图 2 展示这种关系。

图 2 Point、Line 和 Square 类继承 Shape

关联关系是类与类之间的连接,它使得一个类知道另一个类的属性和方法。关联既可以是双向的, 也可以是单向的。单向的关联使用一个箭头表示关联的方向。每一个关联都有两个端点,端点 可以有一个角色名,显出关联的对象。在每一个关联的端点还可以有基数(Cardinality), 表明这一端的类有几个实例,常见基数如下表:

基数 含义
0..1 0 个或一个实例
0..*或* 对实例的数目没有限制
1 只有一个实例
1..* 至少一个实例
m..n m~n 个实例

图 3 聚合关系的实例

图 3 展示了聚合的关系:飞机场跟飞机关联,飞机场拥有飞机,飞机场是整体,飞机是个体; 图中的基数表示当有了一个飞机场,机场可以有任意架飞机,一架飞机既可以属于机场, 也可以不在机场。

图 4 合成关系实例

图 4 表示合成关系:汽车拥有轮胎,且轮胎是汽车的必要部分,轮胎与汽车的生命周期相同; 图中的基数表示一辆车拥有 4 个或 5 个轮胎,而轮胎必须属于这辆车。在图 4 中,汽车与加油站 存在依赖关系,汽车会使用加油站。

对象图(Object Diagrams)

对象的表示也是一个矩形,但与类表示的不同之处在于对象名下面要带下划线。

图 5 对象图的表示形式

在图 5 的左边的表示中,具体实例的名字位于冒号的左边,右边为所属的类。右边表示一个 匿名对象。

序列图(Sequence Diagrams)

可以用来表示对象之间如何交互的 UML 图称为交互图(Interaction Diagrams),交互图中最常见 的就是序列图。

图 6 用户在 ATM 上查询账号信息的序列图

在图 6 的序列图中,最上面的每个矩形代表一个特定的对象;垂直的虚线代表对象的生命跨度; 对象彼此之间发送消息通过垂直线之间的水平线。

用例图(Use Case Diagrams)

用例是从用户的观点对系统行为的一个描述。用例图从用户的角度出发描述系统的功能、需求, 展示系统外部的各类角色与系统内部各种用例之间的关系。用例图包含多个模型元素,这些模型 包括系统,参与者和用例,并且用例图也显示这些元素之间存在的各种关系。

图 7 自动售货机的一个用例模型

图 7 展示了一个自动售货机系统的一个用例模型,参与者有客户和售货员;椭圆代表用例, 有买饮料、放置饮料和收款。

状态图(Statechart Diagrams)

状态图是对类的描述的补充。它用于显示类的对象在一个生命周期实例期间能够具备的所有可能状态, 以及那些引起状态改变的事件。状态的变化称为转换,转换也可以有一个与之相连的动作,后者用于 指定完成这个状态转换系统应该执行的操作。

图 8 电梯运行状态图

图 8 所示的是电梯运行状态图,其中包括初始状态(实心圆)、各种状态以及触发事件。

合作图(Collaboration Diagrams)

合作图描述对象之间的协作关系,也是交互图的一种。除了显示消息的交互外,合作图也显示 对象及他们之间的关系。在实际建模中,如果重点强调对象之间的关系,那就选择合作图。

图 9 打印服务器的合作图

部署图(Deloyment Diagrams)

UML 部署图显示了基于计算机系统的物理体系结构,他可以描述计算机,展示他们之间的连接, 以及驻留在计算机中的软件。每台计算机用一个立方体表示,立方体之间的连线表示计算机 之间的通信关系。

图 10 部署图实例

图 10 表示的是一些人事软件和一些应用软件分别部署在客户端和数据库服务器上,客户端 与数据服务器之间可以通信。

活动图(Avtivity Diagrams)

活动图是状态图的一种特殊情况,它用于显示一系列的顺序的活动,可以捕获动作及他们的结果。 活动图可以用于不同的目的,包括:显示一组相关的动作将如何执行,以及他们怎样影响周围的对象; 显示一个用例的实例在动作和对象状态方面如何执行的;显示一个业务在参与者、工作流程、组织 和对象方面是如何运转的。图 11 是一个工程管理系统的文件打印的活动图。

图 11 活动图的例子

组件图(Component Diagrams)

组件图是根据系统的代码组件来显示系统代码的物理结构。其中组件可以是源代码组件, 二进制组件或可执行组件。组件包含了它所实现的一个或多个逻辑类的相关信息,因此 也就创建了一个从逻辑视图的映射。根据组件图中显示的组件之间的依赖关系,可以很 容易的分析出其中某个组件的变化将会对其他组件产生什么样的影响。图 12 给出了组件 图的表示方式。

图 12 组件图的表示

包图(Package Diagrams)

包提供一种用于组织各种 UML 元素的分组机制。在 UML 中,包用来给元素进行分组,并为 这些元素提供一个命名空间。包所拥有的或引用的所有模型元素称为包的内容。如果从模型 中删除一个包,那么这个包所拥有的元素也将被删除。图 13 显示了包的图形表示

图 13 包的图形表示

参考链接: 维基百科 官方网站