统一建模语言(United Modeling Language,UML)是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
1.UML的结构
UML的结构包括基本构造块、支配这些构造块如何放在一起的规则(架构)和一些运用于整个UML的机制。
(1)构造块。UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图(diagram)。事物是UML中重要的组成部分,关系将事物紧密联系在一起,图是很多有相互相关的事物的组。
(2)公共机制。公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制四种。
·规格说明:规格说明是事物语义的文本描述,它是模型真正的核心。
·修饰:UML为每一个事物设置了一个简单的记号,还可以通过修饰来表达更多的信息。
·公共分类:包括类与对象(类表示概念,而对象表示具体的实体)、接口和实现(接口用来定义契约,而实现就是具体的内容)两组公共分类。
·扩展机制:包括约束(添加新规则来扩展事物的语义)、构造型(用于定义新的事物)、标记值(添加新的特殊信息来扩展事物的规格说明)。
(3)规则。UML用于描述事物的语义规则分别是为事物、关系和图命名。给一个名字以特定含义的语境,即范围;怎样使用或看见名字,即可见性;事物如何正确、一致地相互联系,即完整性;运行或模拟动态模型的含义是什么,即执行。
UML对系统架构的定义是系统的组织结构,包括系统分解的组成部分、它们的关联性、交互、机制和指导原则等,这些提供系统设计的信息。而具体来说,就是指5个系统视图,分别是逻辑视图、进程视图、实现视图、部署视图和用例视图。
·逻辑视图:以问题域的语汇组成的类和对象集合。
·进程视图:可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例,描绘了所设计的并发与同步结构。
·实现视图:对组成基于系统的物理代码的文件和构件进行建模。
·部署视图:将构件部署到一组物理的、可计算的节点上,表示软件到硬件的映射及分布结构。
·用例视图:最基本的需求分析模型。
另外,UML还允许在一定的阶段隐藏模型的某些元素、遗漏某些元素以及不保证模型的完整性,但模型要逐步地达到完整和一致。
2.事物
UML中的事物也称为建模元素,包括结构事物(structural things)、动作事物(behavioral things)、分组事物(grouping things)和注释事物(annotational things)。这些事物是UML模型中最基本的面向对象的构造块。
(1)结构事物。结构事物在模型中属于最静态的部分,代表概念上的或物理上的元素。总共有七种结构事物:
首先是类,类是描述具有相同属性、方法、关系和语义的对象的集合。一个类实现一个或多个接口。
第二种是接口,接口是指类或构件提供特定服务的一组操作的集合。因此,一个接口描述了类或构件的对外可见的动作。一个接口可以实现类或构件的全部动作,也可以只实现一部分。
第三种是协作,协作定义了交互的操作,是一些角色和其它元素一起工作,提供一些合作的动作,这些动作比元素的总和要大。因此,协作具有结构化、动作化、维的特性。一个给定的类可能是几个协作的组成部分。这些协作代表构成系统的模式的实现。
第四种是用例,用例描述一系列的动作,在模型中用例通常用来组织动作事物。用例是通过协作来实现的。
第五种是活动类,活动类是这种类,它的对象有一个或多个进程或线程。活动类和类很相象,只是它的对象代表的元素的行为和其他的元素是同时存在的。
第六种是构件,构件是物理上或可替换的系统部分,它实现了一个接口集合。在一个系统中,可能会遇到不同种类的构件。
第七种是节点,节点是一个物理元素,它在运行时存在,代表一个可计算的资源,通常占用一些内存和具有处理能力。一个构件集合一般来说位于一个节点,但有可能从一个节点转到另一个节点。
(2)行为事物:行为事物是UML模型中的动态部分。它们是模型的动词,代表时间和空间上的动作。总共有两种主要的行为事物。
第一种是交互(内部活动),交互是由一组对象之间在特定上下文中,为达到特定的目的而进行的一系列消息交换而组成的动作。交互中组成动作的对象的每个操作都要详细列出,包括消息、动作次序(消息产生的动作)、连接(对象之间的连接)。
第二种是状态机,状态机由一系列对象的状态组成。
内部活动和状态机是UML模型中最基本的两个动态事物,它们通常和其他的结构事物、主要的类、对象连接在一起。
(3)分组事物。分组事物是UML模型中组织的部分,可以将它们看成是个盒子,模型可以在其中被分解。总共只有一种分组事物,称为包。包是一种将有组织的元素分组的机制。结构事物、行为事物甚至其他的分组事物都有可能放在一个包中。与构件(存在于运行时)不同的是包纯粹是一种概念上的东西,只存在于开发阶段。
(4)注释事物。注释事物是UML模型的解释部分。
3.关系
UML用关系将事物结合在一起,UML中的关系有四种:
(1)依赖(dependencies):两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
(2)关联(association):一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系)。
(3)泛化(generalization):一种一般化和特殊化的关系,描述特殊元素的对象可替换一般元素的对象。
(4)实现(realization):类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
4.用例之间的关系
两个用例之间的关系可以概括为两种情况。一种是用于复用的包含关系,用构造型"《include》"表示;另一种是用于分离出不同行为的扩展关系,用构造型"《extend》"表示。
(1)包含关系:当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例很重要的部分功能时,应该使用包含关系来表示它们。其中这个提取出来的公共用例称为抽象用例。
(2)扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事情,则可以将这个用例分为一个主用例和一个或多个辅用例进行描述可能更加清晰。
另外,用例之间还存在一种泛化关系。用例可以被特别列举为一个或多个子用例,这被称做用例泛化。当父用例能够被使用时,任何子用例也可以被使用。例如,购买飞机票时,既可以通过电话订票,也可以通过网上订票,则订票用例就是电话订票和网上订票的抽象。
5.类之间的关系
(1)关联关系:描述了给定类的单独对象之间语义上的连接。关联提供了不同类之间的对象可以相互作用的连接。其余的关系涉及类元自身的描述,而不是它们的实例。用表示。
(2)依赖关系。有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖于元素X.在UML中,使用带箭头的虚线 表示依赖关系。
在类中,依赖由各种原因引起,例如,一个类向另一个类发送消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类的接口改变,则它发出的任何消息都可能不再合法。
(3)泛化关系。泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类继承的,而父类则是子类的泛化。在UML中,使用带空心箭头的实线表示泛化关系,箭头指向父类。
(4)聚合关系。聚合是一种特殊形式的关联,它是传递和反对称的。聚合表示类之间的关系是整体与部分的关系。例如一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的例子。在UML中,使用一个带空心菱形的实线 表示聚合关系,空心菱形指向的是代表整体的类。
(5)组合关系。如果聚合关系中的表示部分的类的存在与否,与表示整体的类有着紧密的关系,例如公司与部门之间的关系,就应该使用组合关系来表示。在UML中,使用带有实心菱形的实线 表示组合关系。
(6)实现关系。将说明和实现联系起来。接口是对行为而非实现的说明,而类中则包含了实现的结构。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。实现关系用带空心箭头的虚线 表示。
(7)流关系。将一个对象的两个版本以连续的方式连接起来。它表示一个对象的值、状态和位置的转换。流关系可以将类元角色在一次相互作用中连接起来。流的种类包括变成(同一个对象的不同版本)和复制(从现有对象创造出一个新的对象)两种。用 表示。
希赛教育软考学院专家提示:对于聚合关系和组合关系,各种文献的说法有些区别。在这些文献中,首先定义聚集关系(整体与部分的关系),然后再将聚集关系分为两种,分别是组合聚集(相当于上述的"组合关系")和共享聚集(相当于上述的"聚合关系")。
6.图形
UML2.0包括14种图,分别列举如下:
(1)类图:描述一组类、接口、协作和它们之间的关系。在OO系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。
(2)对象图:描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一样,这些图给出了系统的静态设计视图或静态进程视图,但它们是从真实案例或原型案例的角度建立的。
(3)构件图:描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体。
(4)组合结构图:描述结构化类(例如构件或类)的内部结构,包括结构化类与系统其余部分的交互点。它显示联合执行包含结构化类的行为的构件配置。组合结构图用于画出结构化类的内部内容。
(5)用例图:描述一组用例、参与者(一种特殊的类)及它们之间的关系。用例图给出系统的静态用例视图。这些图在对系统的行为进行组织和建模时是非常重要的。
(6)顺序图:是一种交互图(interaction diagram),交互图展现了一种交互,它由一组对象或角色以及它们之间可能发送的消息构成。交互图专注于系统的动态视图。顺序图是强调消息的时间次序的交互图。
(7)通信图:也是一种交互图,它强调收发消息的对象或角色的结构组织。顺序图和通信图表达了类似的基本概念,但每种图所强调的概念不同,顺序图强调的是时序,通信图则强调消息流经的数据结构。
(8)定时图:也是一种交互图,它强调消息跨越不同对象或角色的实际时间,而不仅仅只是关心消息的相对顺序。
(9)状态图:描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。
(10)活动图:将进程或其他计算的结构展示为计算内部一步步的控制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模特别重要,并强调对象间的控制流程。
(11)部署图:描述对运行时的处理结点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个结点包含一个或多个部署图。
(12)制品图:描述计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品图通常与部署图一起使用。制品也给出了它们实现的类和构件。
(13)包图:描述由模型本身分解而成的组织单元,以及它们的依赖关系。
(14)交互概览图:是活动图和顺序图的混合物。