UML的历史
面向对象的分析与设计(OOA&OOD)方法的发展在20世纪80年代中出现了一个高潮,UML就是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其做了进一步的发展,并最终统一为大众所接受的标准建模语言。
UML的定义
UML(Unified Modeling Language,统一建模语言),是一种面向对象的建模语言。UML通过建立各种联系,如类与类之间的关系、类/对象怎样相互配合实现系统的行为状态等。来组建整个结构模型。
UML用来描述模型的内容有3种,分别是事物(Things)
、关系(Relationships)
和图(Diagrams)
,而这3种内容又有具体的划分,如图1-1:
UML中的事物
从图1-1我们可以看到,UML中的事物包括结构事物、行为事物、组织事物和辅助事物(也称注释事物)
结构事物(Structure Things)
-
类(Class)
类是具有相同属性、相同方法、相同语义和相同关系的一组对象的集合。
在UML图中,类使用包括类名、属性和方法的矩形来表示
,如下图2-1所示:
-
接口(Interface)
接口是指类或组件所提供的、可以完成特定功能的一组操作的集合。
在UML图中,接口通常用一个圆形来表示
,如下图2-2所示:
-
协作(Collaboration)
协作定义了交互的操作,表示一些角色和其他元素一起工作,提供一些合作的动作。
在UML图中,协作通常用一个虚线椭圆来表示
,如下图2-3所示:
-
用例(Use Case)
用例定义了系统执行的一组操作,对特定的用户产生可以观察的结果。
在UML图中,用例通常用一个实线椭圆来表示
,如下图2-3所示:
活动类(Active Class)
活动类是指类对象有一个或多个线程或进程的类。活动类和类相似,只是它的对象代表的元素的行为和其他元素同时存在。
在UML图中,活动类的表示方法和普通类的表示方法相似,也是使用一个矩形,只是最外面的边框使用粗线
-
组件(Component)
组件是物理上可替换的,实现了一个或多个接口的系统元素。
在UML图中,组件的表示方法比较复杂
,如图2-5所示:
-
节点(Node)
节点是一个物理元素,它在运行时存在,代表一个可计算的资源,比如一台数据库服务器。
在UML图中,节点使用一个立方体表示
,如图2-6所示:
行为事物(Behavior Things)
行为事物也称动作事物,是UML模型中的动态部分,代表时间和空间上的动作。行为事物主要有两种:交互和状态机。它们是UML模型中最基本的两个动态事物元素,通常和其他的结构元素、主要是类、对象连接在一起。
-
交互(Interaction)
在UML图中,交互的消息通常画成带箭头的直线,如图3-1所示:
-
状态机(State Machine)
状态机是对象的一个或多个状态的集合。在UML图中,状态机通常用一个圆角矩形来表示,如图3-2所示:
组织事物(Grouping Things)
组织事物也称分组事物,是UML模型中组织的部分,可以把它看作一个个的盒子,每个盒子里面的对象关系相对复杂,而盒子与盒子之间的关系相对简单。组织事物只有一种,称为包(Package)
。
包是一种有组织地将一系列元素分组的机制。包与组件的最大区别在于,包纯粹是一种概念上的东西,仅仅存在于开发阶段结束之前,而组件是一种物理元素,存在于运行时。在UML图中,包通常表示为一个类似文件夹的符号,如图4-1所示:
辅助事物(Annotation Things)
辅助事物也称为注释事物,属于这一类的只有注释(Annotation)。
注释就是UML模型的解释部分。在UML图中,一般表示为折起一角的矩形,如图5-1所示:
UML中的关系
UML中的关系(Relationships)主要包括4种:关联关系、依赖关系、泛化关系和实现关系。
-
关联(Association)关系
关联关系是一种结构化的关系,指一种对象和另一种对象有联系。给定关联的两个类,可以从其中的一个类的对象访问到另一个类的相关对象。
在UML图中,关联关系用一条实线表示,如图6-1所示:
另外, 关联可以有方向,表示该关联在某方向被使用。
只在一个方向上存在的关联,称作单向关联(Unidirectional Association)
;
在两个方向上都存在的关联,称作双向关联(Bidirectional Association)
。
-
依赖(Dependency)关系
对于两个对象X、Y,如果对象X发生变化,可能会引起对另一个对象Y的变化,则称Y依赖于X。在UML图中,依赖关系用一条带有箭头的虚线来表示,如图6-2所示:
-
泛化(Generalization)关系
UML中的泛化关系定义了一般元素和特殊元素之间的分类关系,与和C++及Java中的继承关系有些类似。在UML图中,泛化关系用一条带有空心箭头的实线来表示,如图6-3所示:
-
实现(Realization)关系
实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,其中接口只是行为的说明而不是结构或者实现。真正的实现由前一个模型元素来完成。在UML图中,实现关系一般用一条带有空心箭头的虚线来表示,如图6-4所示:
以上讲述了UML中的4种关系,除了需要注意各种关系的区别与联系以外,还要了解对关系的修饰。最常见的,对关系可以做两种修饰。
-
命名,即可以为关系取名,如图7-1所示:
-
数字,可以表示不同对应情况的关系,比如一对多、多对一、一对一和多对多等,如图7-2所示:
UML中的图
UML中的各种图是UML模型的重要组成部分,这里将概述一下组成UML的几种图。
-
用例图(Use Case Diagram)
用例图展现了一组用例、参与者以及它们间的关系。可以用用例图描述系统的静态使用情况。在对系统行为组织和建模方面,用例图是相当重要的。用例图的例子如图8-1所示:
注释
- 小人形状的用户和ATM是参与者;
- 椭圆形状的插入卡、输入密码、打印票据、验证密码及出款是用例;
-
类图(Class Diagram)
类图展示了一组类、接口和协作及它们间的关系,在建模中所建立的最常见的图就是类图。用类图说明系统的静态设计视图,包含主动类的类图——专注于系统的静态进程视图。系统可有多个类图,单个类图仅表达了系统的一个方面。一般在高层给出类的主要职责,在低层给出类的属性和操作。类图的例子如图8-2所示:
注释
- 图中反映了5个类之间的关联关系;
- 人民币账户类和美元账户类从账户类继承;
- 账户与ATM相关联;
- 用户与两种账户类相关联;
对象图(Object Diagram)
对象图展示了一组对象及它们间的关系。用对象图说明类图中所反应的事物实例的数据结构和静态快照。对象图表达了系统的静态设计视图或静态过程视图,除了现实和原型方面的因素外,它与类图作用是相同的。-
组件图(Component Diagram)
组件图,又称构件图,它由组件、接口和组件之间的联系构成。其中的组件可以是源码、二进制码或可执行程序。组件图表示系统中的不同物理部件及其联系,它表达的是系统代码本身的结构。组件图的例子如图8-3所示:
注释
图中有3个组件,组件1与组件3和组件2存在着依赖关系。
-
配置图(Deployment Diagram)
配置图展现了对运行时处理节点以及其中组件的配置。它描述系统硬件的物理拓扑结构(包括网络布局和组件在网络上的位置),以及在此结构上执行的软件(即运行时软组件在节点中的分布情况)。用配置图说明系统结构的静态配置视图,即说明分布、交付和安装的物理系统。配置图的例子如图8-4所示:
注释
图中有3个处理机和22上设备,相互之间是关联的关系。
-
时序图(Sequence Diagram)
时序图显示多个对象之间的动态协作,重点是显示对象之间发送消息的时间顺序。时序图也显示对象之间的交互,即在系统执行时,某个指定时间点将发生的事情。时序图的一个用途是表示用例的行为顺序,当执行一个用例行为时,时序图中的每一条消息对应了一个类的操作或状态机中引起转换的触发事件。用时序图说明系统的动态视图,例子如下图8-4所示:
协作图(Collaboration Diagram)
协作图在对一次交互中有意义的对象和对象间的连接建模,它强调收发消息对象的组织结构,按组织结构对控制流建模。除了显示消息的交互之外,还显示对象以及它们之间的关系。-
状态图(Statechart Diagram)
状态图展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。一个状态图描述了一个状态机,用状态图说明系统的动态视图。状态图对于接口、类或协作的行为建模尤为重要,可用它描述用例实例的生命周期。其例子如图8-6所示:
-
活动图(Activity Diagram)
活动图是状态图的一个变体,显示了系统中从一个活动到另一个活动的流程。活动图显示了一些活动,强调的是对象之间的流程控制,例子如图8-7所示: