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展示这种关系。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQvL+e7n+S4gOW7uuaooeivreiogFVNTOeahOeugOWNleS6huino18yMDE3LTA0LTIwXzcxNjBQd3UucG5n)
图2 Point、Line和Square类继承Shape
关联关系是类与类之间的连接,它使得一个类知道另一个类的属性和方法。关联既可以是双向的,
也可以是单向的。单向的关联使用一个箭头表示关联的方向。每一个关联都有两个端点,端点
可以有一个角色名,显出关联的对象。在每一个关联的端点还可以有基数(Cardinality),
表明这一端的类有几个实例,常见基数如下表:
基数 |
含义 |
0..1 |
0个或一个实例 |
0..\*或\* |
对实例的数目没有限制 |
1 |
只有一个实例 |
1..\* |
至少一个实例 |
m..n |
m~n个实例 |
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MGM2MC5wbmc=)
图3 聚合关系的实例
图3展示了聚合的关系:飞机场跟飞机关联,飞机场拥有飞机,飞机场是整体,飞机是个体;
图中的基数表示当有了一个飞机场,机场可以有任意架飞机,一架飞机既可以属于机场,
也可以不在机场。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2ME9FRS5wbmc=)
图4 合成关系实例
图4表示合成关系:汽车拥有轮胎,且轮胎是汽车的必要部分,轮胎与汽车的生命周期相同;
图中的基数表示一辆车拥有4个或5个轮胎,而轮胎必须属于这辆车。在图4中,汽车与加油站
存在依赖关系,汽车会使用加油站。
对象图(Object Diagrams)
对象的表示也是一个矩形,但与类表示的不同之处在于对象名下面要带下划线。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MGJPSy5wbmc=)
图5 对象图的表示形式
在图5的左边的表示中,具体实例的名字位于冒号的左边,右边为所属的类。右边表示一个
匿名对象。
序列图(Sequence Diagrams)
可以用来表示对象之间如何交互的UML图称为交互图(Interaction Diagrams),交互图中最常见
的就是序列图。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MDFpVy5wbmc=)
图6 用户在ATM上查询账号信息的序列图
在图6的序列图中,最上面的每个矩形代表一个特定的对象;垂直的虚线代表对象的生命跨度;
对象彼此之间发送消息通过垂直线之间的水平线。
用例图(Use Case Diagrams)
用例是从用户的观点对系统行为的一个描述。用例图从用户的角度出发描述系统的功能、需求,
展示系统外部的各类角色与系统内部各种用例之间的关系。用例图包含多个模型元素,这些模型
包括系统,参与者和用例,并且用例图也显示这些元素之间存在的各种关系。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MEN0Yy5wbmc=)
图7 自动售货机的一个用例模型
图7展示了一个自动售货机系统的一个用例模型,参与者有客户和售货员;椭圆代表用例,
有买饮料、放置饮料和收款。
状态图(Statechart Diagrams)
状态图是对类的描述的补充。它用于显示类的对象在一个生命周期实例期间能够具备的所有可能状态,
以及那些引起状态改变的事件。状态的变化称为转换,转换也可以有一个与之相连的动作,后者用于
指定完成这个状态转换系统应该执行的操作。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MFAzaS5wbmc=)
图8 电梯运行状态图
图8所示的是电梯运行状态图,其中包括初始状态(实心圆)、各种状态以及触发事件。
合作图(Collaboration Diagrams)
合作图描述对象之间的协作关系,也是交互图的一种。除了显示消息的交互外,合作图也显示
对象及他们之间的关系。在实际建模中,如果重点强调对象之间的关系,那就选择合作图。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MGNCcC5wbmc=)
图9 打印服务器的合作图
部署图(Deloyment Diagrams)
UML部署图显示了基于计算机系统的物理体系结构,他可以描述计算机,展示他们之间的连接,
以及驻留在计算机中的软件。每台计算机用一个立方体表示,立方体之间的连线表示计算机
之间的通信关系。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MHBMdi5wbmc=)
图10 部署图实例
图10表示的是一些人事软件和一些应用软件分别部署在客户端和数据库服务器上,客户端
与数据服务器之间可以通信。
活动图(Avtivity Diagrams)
活动图是状态图的一种特殊情况,它用于显示一系列的顺序的活动,可以捕获动作及他们的结果。
活动图可以用于不同的目的,包括:显示一组相关的动作将如何执行,以及他们怎样影响周围的对象;
显示一个用例的实例在动作和对象状态方面如何执行的;显示一个业务在参与者、工作流程、组织
和对象方面是如何运转的。图11是一个工程管理系统的文件打印的活动图。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MG9mRS5wbmc=)
图11 活动图的例子
组件图(Component Diagrams)
组件图是根据系统的代码组件来显示系统代码的物理结构。其中组件可以是源代码组件,
二进制组件或可执行组件。组件包含了它所实现的一个或多个逻辑类的相关信息,因此
也就创建了一个从逻辑视图的映射。根据组件图中显示的组件之间的依赖关系,可以很
容易的分析出其中某个组件的变化将会对其他组件产生什么样的影响。图12 给出了组件
图的表示方式。
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MEMwUS5wbmc=)
图12 组件图的表示
包图(Package Diagrams)
包提供一种用于组织各种UML元素的分组机制。在UML中,包用来给元素进行分组,并为
这些元素提供一个命名空间。包所拥有的或引用的所有模型元素称为包的内容。如果从模型
中删除一个包,那么这个包所拥有的元素也将被删除。图13显示了包的图形表示
![img](https://www.#.com/go/aHR0cDovL3d3dy54aGNvZGluZy5jbi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDQv57uf5LiA5bu65qih6K+t6KiAVU1M55qE566A5Y2V5LqG6KejXzIwMTctMDQtMjBfNzE2MFAtVy5wbmc=)
图13 包的图形表示
永久更新地址:http://www.xhcoding.cn/archives/154.html
参考链接:
维基百科
UML官方网站