UML最简明教程
1 综述
1.1 什么是UML
UML(统一建模语言,Unified Modeling Language)是一种面向对象分析与设计的标准的图形化的建模语言。
1.2 主要目标
易于使用、表达力强、可视化建模、与实现及过程无关、可扩展、面向对象、最佳实践的集合等。
1.3 UML的架构
元元模型(meta-metamodel)[事物]
元模型(metamodel)[事物概念的实例]
模型(model)[元模型层事物的实例,class model,type model]
用户模型(user model)[元模型层事物的实例,object model,instance model]
1.4 UML的应用
需求分析、分析、设计、构造、测试。
1.5 UML的构成
视图(views)、图(diagrams)、模型元素(model elements)、通用机制(general mechanism)等构成。
2 用例视图及用例图(use-case diagram)
2.1 用例视图(use-case view)
用于描述系统应具有的功能集,是从外部用户出发,对系统的抽象表示。用例视图包含若干个用例,其功能依赖外部用户或另一个系统触发,或为之提供服务以及与外部的交互。
2.2 用例图
用例模型的基本构件有:用例、角色、系统。元素之间的关系则包括:泛化、关联和依赖。
l 系统:用例模型的应用范围(注意不是实际的系统),长方框表示。
l 角色:与系统交互的人或事,比如客户、财务人员、某种通信设备、Timer等,是一个群体抽象概念,人形图表示。角色是用例的触发者。角色也是一种类,有类的继承、抽象等特性。
l 用例:代表一个完整的功能,是动作(action)步骤的集合。用例之间有Extend、Include、Dependece的关系。
用例描述:目标、如何启动、角色和用例之间的消息流、执行方案、值反馈。
3 类图(calss diagram)
类图是用类及其关系描述系统的静态模型的图示,用长方形表示,分别包括类名、属性、操作。
类的主要关系有: (1)泛化(Generalization) (2)关联(Association) (3)依赖(Dependency) (4)聚合(Aggregation)。另外,还有精化(Realization)关系,并不常用。
3.1 泛化(Generalization)
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
代码表示:
class order{}
class examinationOder extends order {}
public class Test {
public void test() {
order = new examinationOder ();
}
}
3.2 依赖(Dependency)
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
如:体检报告依赖订单获知体检对象的基本信息。
3.3 关联(Association)
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
如:客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再如单位和职员,每个单位对应一些特定的职员,每个职员对应一特定的单位。
注意,客户是use case 中是一个actor,但它同时是一个类。关联的两者是平行的。在StarUML中,该对象可以同时表示为角色的形状和类的形状。
3.4 聚合(Aggregation)和组合(Composition)
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
如一份综合的体检报告,包括诊断报告、体检意见、健康指导书等内容。
如果对象B完全是由对象A组成的,那么这种特殊关系称为组合,用实心连线表示。
3.5 精化(Realization)
精化关系常用于模型化表示同一事务的不同实现,一种是简单的,另一种是复杂的高级的,用空心三角虚线表示。

3.6 对象图
对象是类的实例化。对象图是类图的一个范例,常用以示例一个复杂的类图。
图示符号与类图类似,只是对象名下加横线以区别之。
4 动态建模
面向对象动态建模,用于建立行为的实体间行为交互的四种图:状态图(Stage Diagram),序列图(Sequence Diagram),协作图(Communication Diagram),活动图(Activity Diagram) 。其中,序列图与协作图表述的是相似的消息,活动图是状态图的一种。行为的触发和传导通过消息来传递。
消息一般包括:
l 简单消息:普通控制流
l 同步消息:嵌套控制流,典型情况下表示下一个操作调用
l 异步消息:异步控制流,不直接返回给调用者,发送者发送完后不待消息处理完成而继续执行

4.1 状态图
描述对象、子系统、系统的生命周期。通过状态图可以了解一个对象所能到达的所有状态以及对象收到的事件对对象状态的影响。
状态图可以有一个起点(黑圈点)和多个终点(黑圈点外加圆环)以及多个状态(圆角四边形)表示,状态转移以及引起状态改变的事件用箭头表示。

状态的要素:名称(如未付/已付)、[状态变量的变量名和变量值]、[活动]。
事件说明(Event-Signature):事件名、参数、触发事件、附件数据。
监护条件(Guard-Condition):状态转移中的布尔表达。
动作表达式(Action-Expression):当状态转移开始时所执行的一个过程的表达式。
发送子句:是动作的特例,用来在两个状态转移之间发送消息。
事件:引起某些动作执行的事情,包括:
l 条件成真(监护条件达成)
l 收到另一个对象中的信号
l 收到另一个对象(或对象本身)的操作调用
l 经过指定时间间隔(Timer)
l 异常(UML不对此提供直接支持)
子状态:状态可能有嵌套的子状态,且子状态可能在另一个状态图。分and-substate和or-substate。
4.2 序列图
描述对象间的交互,以消息的发送和接收为主。
序列图有两个坐标轴,纵轴显示时间,横轴显示对象,中间的分割虚线称为对象的生命线。序列图包含一般格式和实例格式,一个实例格式仅表示一种特定的情节下的交互,因此是没有条件、分支和循环的。

序列图中的消息同样有普通、并发、异步的区别。而类型则有call和send。调用分为普通调用和递归调用。
4.3 协作图
协作图(Collaboration Diagram /Communication Diagram,也叫合作图)是一种交互图(interaction diagram),强调的是发送和接收消息的对象之间的组织结构。一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。

协作图主要描述协作对象之间的交互和链接,与序列图的区别是,协作图强调了空间,而序列图强调了时间。
在决定选用序列图还是协作图的时候,考虑以下几点有助于你作出最合适的选择:
l 如果要显示代码中与时间或线程密切相关的问题,选择序列图。
l 如果要显示对象之间的交互模式,选择协作图。
l 如果要显示几个或者大量对象之间的交互过程,选择序列图。
l 如果要显示少量对象之间的大量消息传递或交互过程,选择协作图。
4.4 活动图
活动图(Activity Diagram)显示动作极其结果,著重于描述方法实现中所完成的工作及用例实例或对象中的活动顺序,以及从一个活动到另一个活动的控制流,其本质上是一种流程图。
UML的活动图中包含的图形元素有动作状态、活动状态、动作流、分支与合并、分叉与汇合、泳道和对象流等。
动作状态是原子的不可中断的动作,它是构造活动图的最小单位。活动状态可以分解成其他子活动或者动作状态。与状态图不同,活动图的转换一般都不需要特定事件的触发。与状态图的转换相同,活动图的转换也用带箭头的直线表示,箭头的方向指向转入的方向。泳道将活动图中的活动划分为若干组,并把每一组指定给负责这组活动的业务组织,即对象。在活动图中,泳道区分了负责活动的对象,它明确地表示了哪些活动是由哪些对象进行的。在包含泳道的活动图中,每个活动只能明确地属于一个泳道。

活动图与流程图的区别
(1)、流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系。而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
(2)、活动图能够表示并发活动的情形,而流程图不行。
(3)、活动图是面向对象的,而流程图是面向过程的。
5 物理建模
5.1 组件图
组件图(Component Diagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含3种元素:组件(Component)、接口(Interface)和依赖(Dependency)。每个组件实现一些接口,并使用另一些接口。组件是定义了良好接口的物理实现单元,是系统中可替换的物理部件。一般情况下,组件表示将类、接口等逻辑元素打包而形成的物理模块。一个组件包含它所实现的一个或多个逻辑类的相关信息,创建了一个从逻辑视图到组件视图的映射。

有三种类型的组件:配置组件(Deployment Component)、工作产品组件(Work product component)和执行组件(Execution Component)
(1)、配置组件是运行系统需要配置的组件,是形成可执行文件的基础。操作系统、Java虚拟机和数据库管理系统都属于配置组件。
(2)、工作产品组件包括模型、源代码和用于创建配置组件的数据文件,它们是配置组件的来源。工作产品组件包括UML图、Java类和JAR文件、动态链接库(dll)和数据库表等。
(3)、执行组件是在运行时创建的组件,是最终可运行的系统产生的允许结果。EJB、Servlets、HTML和XML文档、COM+和.Net组件以及CORBA组件都是执行组件的例子。
5.2 部署图
一个UML部署图(对象管理组织2001)描述了一个运行时的硬件结点,以及在这些结点上运行的软件组件的静态视图。 部署图显示了系统的硬件,安装在硬件上的软件,以及用于连接异构的机器之间的中间件。
部署图的核心包括:节点或组件,依赖和通信关联。

l 结点和组件
一个结点,通常描述成一个立体的盒子,表示一个计算设备,一般是一个单独的硬件设备,例如一台电脑,网络路由器,主机,传感器,或个人数字助理(PDA)。 组件,描述为矩形,左侧面还伸出两个较小矩形,这和UML组件图上使用的符号是相同的,它表示软件的中间产物,例如文件、框架、或领域组件。
l 依赖和通信关联
通信关联,经常称为连接,被描述为连接结点间的线条。组件间的依赖则被建模成虚线箭头,这和其他UML图上使用的符号是一样的。
6 小结
UML图可分为表述结构的图与表述行为的图两大类,如下:

UML图的架构
注:本文所有的UML图均使用 StarUML 软件绘制,这是一个免费的软件。图都很简单,基于一个医院体检的业务背景,尽量做到“最简明”。不当之处,请指教。
本文相关资料下载: UML最简明教程.docx UML最简明教程-示例.uml
其他相关的资料: uml设计核心技术.rar UML用例图.pdf UML Diagrams.ppt uml状态图.ppt
