第二章 UML语言体系
2.1 UML语言组成
UML是一门设计语言,由一些构造元素、规则、公共机制构成。构造元素描述事物的基本成分,这些基本成分按照某种规则关联在一起,组成图;同时,这些基本元素都遵循通用规则,即公共机制。
2.1.1构造元素
构造元素包括基本元素、关系、图。这3种元素代表了软件系统或业务系统中的某个事物或事物间的关系。
2.1.2 规则
构造元素应该具有命名、范围、可见性、完整性和执行等属性。规则是对软件系统或业务系统中的某些事物的约束或规定。
2.1.3 公共机制
包括详述、修饰、通用划分、扩展机制。公共机制指适用于软件系统或业务系统中每个事物的方法或规则。
2.1.4 UML 基本关系符号
2.2 基本元素
基本元素分为4类:结构元素、行为元素、分组元素、注释元素。
2.2.1 结构元素
结构元素定义了业务或软件系统中的某个物理元素,描述了事物的静态特征。结构元素常用名词表示。结构元素有7种:类、对象、接口、主动类、用例、协作、构件、节点。
1.类和对象
类是对具有相同属性、相同操作、相同关系的一组对象的共同特征的抽象,类是对象的模板,对象是类的一个实力。
(1)类的表示
在UML中,类是用一个矩形表示的,它包含三个区域,最上面是类名、中间是类的属性、最下面是类的方法。
例如,描述people(类)用图形表示
假设,people类包含的属性和行为如下
类名,people,在第一栏
字段名,name、age,字段名(属性)放在第二栏
方法名,speak()、breathe()、fly(),方法在第三栏
注意:行为、服务、方法可以等价理解;属性、域、字段
(2)对象的表示
对象是用一个矩形表示,在矩形框中,不再写出属性名和方法名,只是在矩形框中用“对象名:类名”的格式表示一个对象
2.接口
因为,外界对类(或构件)的使用,是通过类(或构件)的方法来实现的,因此,我们把类或构件的方法集合称为接口。接口向外界声明了它能提供的服务。
接口分为供给接口和需求接口两种,供给接口只能向其它类(或构件)提供服务,需求接口表示类(或构件)使用其它类(或构件)提供的服务
3.主动类
主动类是指该类创建的对象至少拥有一个进程或线程,通过进程或线程控制任务的执行。
主动类的表示方法与一般类相似,只是最外边框是粗线描述而已。
4.用例
在系统中,为完成某个任务而执行的一序列动作,以实现某种功能,我们把这些动作的集合称为用例实例。用例是对一组用例实例共同特征的描述,用例与用例实例的关系,正如类与对象的关系。
用例是著名的大师Ivar Jacobson首先提出的,现已经成为了面向对象软件开发中一个需求分析的最常用工具 。
用例是用一个实线椭圆来表示的,在椭圆中写入用例名称。如,用例”用户登录”
5.协作
协作是指有意义的交互,即,一组对象为了完成某个任务,相互间进行的交互。
用例的实现:实现某个用例的一组对象之间的交互,即把一个用例表示为多个对象间的交互(协作)。从本质上说,协作就是用例的实现。
用一个带2个分栏的虚线椭圆表示协作。如,用例”销售房产”,用协作” 销售房产”表示时,其对应的表示法如图
6.构件
构件也称组件:系统设计中,一个相对独立的软件部件,它把功能实现部分隐藏在内部,对外声明了一组接口(包括供给接口和需求接口)。因此,两个具有相同接口的构件可以相互替换 。
构件是比“类”更大的软件部件,例如一个COM组件、一个DLL文件、一个JavaBeans、一个执行文件等等。为了更好地对在UML模型中对它们进行表示,就引入了构件(也译为组件).
构件通常采用带有2个小方框的矩型表示
7.节点
节点是指硬件系统中的物理部件,它通常具有存储空间或处理能力 。如,PC机、打印机、服务器等都是节点。在UML中,用一个立方体表示一个节点。如,节点“server”的表示方法
2.2.2 行为元素
行为元素是用来描述业务或软件系统中,事物之间的交互或事物的状态变化。行为元素描述了事物的动态特征。行为元素用动词表示。
行为元素有2种:交互和状态机
1.交互
交互(interaction)是为了完成某个任务的对象之间相互作用,这种作用是通过信息的发送和接受完成的。
交互的表示方法:用一条有向直线来表示对象间的交互,并在有向直线上面标有消息名称。
2.状态机
状态机(state machine)在对象生命周期内,在事件驱动下,对象从一种状态迁移到另一状态的状态序列,这些状态序列构成了状态机,即,一个状态机由多个状态组成。
在UML模型中,将状态表示为一个圆角矩形,并在矩形内标识状态名称。 如,“等待”表示如图
2.2.3 分组元素
对于一个中大型的软件系统而言,通常会包含大量的类、接口、交互,因此也就会存在大量的结构元素、行为元素,为了能有效地对这些元素进行分类和管理,就需要对其进行分组。在UML中,提供了“包(Package)”来实现这一目标 。
表示“包(Package)”的图形符号,与windows中表示文件夹的图符很相似。包的作用与文件夹的作用也相似。“数据访问”包的表示法。
2.2.4 注释元素
在模型中,用来对其它元素的解释部分(文本解释)称为注释。注释元素是用一个右上角折起来的矩形,解释的文字就写在矩形中。注释符号如图
2.3 关系元素
前面介绍了表示事物的基本元素,本节介绍反映事物之间关系的元素。在UML中,共定义了24种关系,如表2-1所示。
这24种关系在建模表示时可以归为关联关系、实现关系、泛化关系、扩展关系和依赖关系五种,下面介绍这些关系的表示法
1.关联关系
关联(Association)表示两个类之间存在某种语义上的联系,这种语义是人们赋予事物的联系。关联关系提供了通信的路径,它是所有关系中最通用、语义最弱的关系。
在关联关系中,有两种比较特殊的关系,它们是聚合关系和组合关系。
(1)关联关系的表示
关联关系是聚合关系和组合关系的统称,是比较抽象的关系;聚合关系和组合关系是更具体的关系。在UML中,使用一条实线来表示关联关系。
(2)聚合关系
聚合(Aggregation)是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系 。聚合关系是一种松散的对象间关系——计算机和它的外围设备就是一例。一台计算机和它的外设之间只是很松散地结合在一起。这些外设可有可无,可以与其他计算机共享,而且没有任何意义表明它由一台特定的计算机所“拥有”——这就是聚合。
棱形端表示事物的整体部分,另一端表示事物的部分。如计算机就是整体部分,外设就是部分
(3)组合关系
如果发现“部分”类的存在,是完全依赖于“整体”类的,那么就应该使用“组合”关系来描述 。组合关系是一种非常强的对象间关系,例如,树和它的树叶之间的关系。树是和它的叶子紧密联系在一起,叶子完全属于这树,它们不能被其它的树所分享,并且当树死掉,叶子也会随之死去——这就是组合,组合是一种强的聚合关系。
2.泛化关系
泛化关系描述了从特殊事物到一般事物之间的关系,也就是子类到父类之间的关系。从父类到子类的关系,则是特化关系。
3.实现关系
实现关系是用来规定接口和实现接口的类或组件之间的关系。接口是操作的集合,这些操作用于规定类或组件提供的服务。实现关系是从类指向接口的带空心箭头的虚线表示。
4.依赖关系
有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖(Dependency)于元素X。
如果两个元素是类,则类间的依赖现象有多种,如:一个类向另一个类发消息:一个类是另一个类的数据成员:一个类是另一个类的某个方法的参数。
本质上说,关联和泛化以及实现关系都属于依赖关系的一种,但是它们有更特别的语义,因此定义了其自己的名字和详细的语义。
5.扩展关系
扩展表示把一个构造型附加到一个元类上,使得元类的定义中包括这个构造型。它是一种UML提供的底层的扩展机制,与用例之间的扩展(Extend)关系是不同的。在UML中,用一个带箭头的实线表示
2.4 UML图和视图
基本元素描述了事物,关系描述了事物间的关系。在UML中,通过关系把多个事物连接在一起,构成了图。图可视化地描绘了系统某一方面的特征。
在UML 2.0中共定义了13种图,比UML 1.0新增了3种。表2-2列出了这13种图的功能。
UML的作者们并没有把图作为UML的主要部分,因此各种图形并不是精确定义的,往往可以将一种图形中的成分合法地绘制到另外一种图形中。在UML参与手册第2版中,将UML图划分为四大领域9种视图,如表2-3所示。
从使用的角度来看,将UML的13种图分为结构模型(也称为静态模型)和行为模型(也称为动态模型)两大类,但这里讲的结构、行为其含义与前面所说的是有一定区别的:前者是从定义角度,后者则是从使用角度。
2.5 UML规则和机制
2.5.1 规则
在UML中,基本元素在使用时,应该遵守一序列规则,其中,最常用的3种语义规则如下:
1.命名
为事物、关系和图起名字。和任何语言一样,名字都是一个标识符 。
2.范围
指基本元素起作用的范围,相当于程序设计语言中的变量的“作用域”。
3.可见性
我们知道,UML元素可能属于一个类或包中,因此,所有元素都具有可见性这一属性。在UML中共定义了4种可见性
2.5.2 机制
在UML语言中,定义了4种公共机制:规格描述、修饰、通用划分、扩展机制。
1.规格描述
在UML语言中,每个元素都用一个图形符号表示,同时,对图形符号的语义可以用详细的文字进行描述,这种对图形符号的文字描述称为规格描述,也称为详述。
如图2-21所示,对每个用例来说,既有图形描述,也有对应的文字描述,即详细描述。
2.修饰
UML中,基本元素的符号对事物最重要的的方面提供了可视化表示,而要把元素的细节方面表示出来,就必须通过对元素进行修饰。例如,用具体的可视性的符号修饰元素、用斜体字表示抽象类,这些都是对元素细节的描述。
3.通用划分
UML通用划分,就是对UML元素进行分类。有2种分类方法:类与实例、接口与实现。
(1)类与对象的划分:类是一种抽象,一个模型,对象是类的实例。
(2)接口与实现的分离:接口是一种声明、是一个合同、一个计划;实现则是完成一个计划、一个合同、执行声明。
在UML中,用例就是一种对功能的声明和定义,是对事物功能的抽象描述;而协作则是实现用例声明的功能实现;操作名是声明服务的,而方法体则是实现服务的,因此,用例与协作、操作名与方法体之间就是接口与实现的关系。
4.扩展机制
由于,UML中的基本元素不能表示所有事物,因此,我们通过一些方法对基本元素进行扩展,主要的扩展机制有:构造型、标记值和约束
(1)构造型
构造型就是构造一种新的UML元素,例如,我们构造一个元素《exception》,用该元素来表示软件的异常
表示构造型的符号有三种,图2-22就是用3种不同的方式来表示“异常”这种构造型。假设Overflow是类名称
第一种表示法:创建一种新的UML元素符号的方法是,用符号《》把构造名字括起来,这是一种标准表示方法。如,《exception》就是新构造的元素。
第二种表示方法:用符号《》把构造名字括起来,并为元素增加一个图标。
第三种表示方法:直接用一个图标表示新的构造元素。
(2)标记值
标记值是用来为事物(元素)添加新特征的。标记值的表示方法是用形如“{标记信息}”的字符串表示。标记信息通常由名称、分隔符和值组成。标记值是对元素属性的表示,因此,标记值放在UML元素中的,如,name=“李小平”。
(3)约束
约束是用来标识元素之间约束条件,是用来增加新的语义或改变已存在规则的一种机制(自由文本和OCL两种表示法)。约束的表示法和标记值法类似,都是使用花括号括起来的串来表示,不过,不能够把它放在元素中,而是放在相关的元素附近。
2.6 UML表示系统体系
在RUP中,从5个角度对系统进行建模,5个视图分别是用例视图、设计视图、组件视图、并发视图、部署视图。即,从5个角度来描述系统。
1.用例视图:描述了系统的功能和参与者,由多个用例图组成,是主要的需求模型。
2.设计视图:又称逻辑视图,描述了软件系统的组成、结构、行为,是软件系统的蓝图,该种视图常由类图、交互图、状态图和活动图组成。
3.组件视图:描述了软件系统的组成成分,即,软件发布时,系统包含的软件构件和文件。这种视图常用构件图、交互图、状态图、活动图描述。
4.并发视图:描述系统各部分之间的同步和异步执行情况。常用状态图和协作图来描述。
5.部署视图:描述了软件系统的各部分,如何部署到各硬件节点上。常用部署图、交互图、状态图、活动图描述。
下面是描述软件系统的5种视图