今天我们来学习UML的通用知识,在真正接触UML核心之前,我们首先了解一下UML的一些通用知识,这如同在进入公园之前,先在公园周围溜达溜达。
那么,我们在进入UML这个公园之前,要看看UML公园周围的什么风景呢?下面这个图给出这次带领大家参观的内容。
这就是UML第二讲
首先,我带领大家参观一下“UML中的事物”。UML中的事物是UML中基本的面向对象的构造块,也是UML中的重要词汇,使用这些构造块可以构造出良好模型。在UML中定义了4种事物,如下图所示:
UML中的事务
1. 结构事物
结构事物(structural thing)是UML模型中名词,通常用于描述模型的概念元素或物理元素。结构事物主要包括:
(1)类(class)
类是对具有相同属性和行为的对象的描述。在UML中,类的图形是一个矩形框,通常被水平分为三部分,从上到下依次是类的名称、类的属性和类的操作。如下图所示:
类(class)
(2)接口(interface)
接口定义一组操作的规约,但并不对操作进行实现。每个操作描述了类可以提供的一种服务。在UML中,接口可以使用两种图形来表示,一种使用圆圈来表示,这种情况往往与某个类连接在一起,以表示类可以对外提供的接口。一种是使用与类相似的图标,加上构造型《interface》。这两种情形如下图所示:
接口(interface)
(3)协作(collaboration)
协作定义一个交互过程。它是由一组共同工作以提供协作行为的角色和其他元素构成的一个整体。通常来说,这些协作行为大于所有元素的行为总和。在图形上,协作使用虚线椭圆来表示:
协作(collaboration)
(4)用例(use case)
用例描述一组动作序列,系统执行这些动作后将对特定的参与者产生有价值且可观察的结果。也可以简单说用例是系统对外部参与者提供的一项服务或功能。在UML中,用例使用下面的图形来表示:
用例(use case)
(5)主动类(active class)
主动类对象本身至少拥有一个进程或线程,因此,主动类的对象可以自动地启动控制活动,控制线程与其他元素并行执行。主动类的表示方法与类相似,但其左右外框是双线:
主动类(active class)
(6)构件(component)
构件是定义了良好接口的物理实现单元,是系统中物理的、可替代的部件。它提供一组接口的实现,每个构件体现了系统设计中某个特定的类。
构件(component)
(7)节点(Node)
节点是系统在运行时切实存在的物理对象,它表示一个计算资源,这些资源往往具有记忆能力和处理能力。一组构件可以驻留在一个节点内,也可以从一个节点迁移到另外一个节点。在图形上,把节点画成一个立方体或长方体。
节点(Node)
2. 行为事物
行为事物(behavioral thing)是UML模型的动态部分,可以用于描述跨越时间和空间的行为,共有三种行为事物。
(1)交互(interaction)
交互是指在特定的语境(Context)中,一组对象为共同完成一定任务,为进行一系列消息交换而组成的动作以及消息交换的过程中形成的消息机制。交互的可视化主要通过消息来表示。消息由带有名字或内容的有向箭头来表示:
(2)状态机(state machine)
状态机是一个类的对象所有可能的生命历程的模型,因此状态机可用于描述一个对象或一个交互在其生命周期内响应时间所经历的状态序列。状态机涉及到其它一些元素,如状态、转移、事件和活动等。在图形上,把状态画成一个圆角矩形。下图是图书的一个状态:
(3)活动(activity)
活动描述了计算过程执行的步骤序列。活动的一个步骤称为一个动作,在图形上使用下图所示的图形来表示:
3. 分组事物
分组事物(grouping thing)是UML模型的组织部分,主要的分组事物是包(package)。包是用于对设计本身进行组织的通用机制,包内可以放入结构事物、行为事物或其它分组事物。包的图形如下:
4. 注释事物
注释事物(annotational thing)是UML模型的解释部分。这些注释事物可以用来描述、说明和标注模型中的任何元素。主要的注释事物是注解(note),注解是依附于一个模型元素或一组元素之上对其进行解释或约束的符号。其图形如下所示:
以上我们详细参观了UML中的事物,下面我们再转战UML中的关系。
UML中的关系
1. 依赖关系
依赖(dependency)是两个模型元素间的语义关系,其中一个元素(独立元素)发生变化会影响另一个元素(依赖元素)的语义。在图形上,把依赖画成一条可能有方向的虚线,也可能在其上还带一定的标志。下图给出了两个类之间的依赖关系:
依赖关系
2. 关联关系
关联(Association)是类之间的结构关系,用它来描述一组链,链是类对象之间的链接。
下图给出了Department类和Teacher类之间的关联关系。这种关联是一种单向关联,它表征在Teacher类中要使用Department类的对象作为其成员。关于关联更多的内容将在类图中作进一步的介绍。
关联关系
3. 泛化关系
泛化(generalization)是一种特殊/一般关系。特殊元素(子元素)基于一般元素(父元素)而建立。用这种方法,子元素共享父元素的属性和行为。
下图给出了一般类(父类)Vehicle(车辆)和特殊类(子类)Truck(卡车)之间的泛化关系。在Vechicle类中可以定义车辆共有的属性和行为,而在Truck类中定义卡车特有的属性和行为。
泛化关系
4. 实现关系
实现(realization)是类目之间的语义关系,其中一个类目规定了另外一个类目执行的规约。实现可以用于接口及实现其的类之间,也可以用于用例和实现其的协作之间。在图形上,实现关系使用带有空心三角形的虚线来表示,下面是接口与实现其的类之间的实现关系表示方法:
实现关系
在UML中,有四种贯穿整个语言且通用一致的公共机制:
UML中的公共机制
1. 规格说明
UML中的每个模型元素都可以添加规格说明(specification),以提供对构造块的语法和语义的文字说明。UML中的图形化表示用来可视化建模,而UML的规格说明用来说明构造块的细节。
2. 修饰
UML中的大多数元素都有唯一的图形表示符号,以展示其最重要的方面。但对于一些其它细节可以表示为图形或文字修饰,放到基本图形中。如,抽象类的名称使用斜体来表示,类属性或方法的可见性可以在其前面使用+(公有)、-(私有)和#(保护的)来表示。
3. 通用划分
在面向对象建模中,有2种通用划分:
第一种是类和对象的划分。类是一种抽象,对象是类的实例。在UML中,在对类和对象进行建模时,在图形上可以区分开类及其对象。
类和对象的划分
在上面这个图中,Person是一个类,而右面三个是它的对象,其中第一个显式的指出Jack是类Person的一个对象;而第二个是Person的一个匿名对象;第三个未给出其所属的对象,但可以在其规格说明中指出其所属的类。
第二种是接口和实现的分离。接口声明了一个规约,而实现则表示了对该接口中规约的具体实施。在UML中,可以对接口建模,也可以对实现进行建模。下图中,IUser是一个接口,VipUser是实现该接口的一个类:
接口和实现的分离
4. 扩展机制
UML再丰富也无法把实际细节完全表达出来,因此,UML中提供了扩展机制,使人们能够对UML按照某种方式来扩展其功能。UML主要提供了三种扩展机制:构造型、标记值和约束。
(1)构造型
构造型扩展机制的目的就是基于一个已存在的模型元素再重新定义一个新的模型元素,以扩展UML的词汇。
构造型扩展机制
如上图中,在类的基础上添加构造型《Exception》以指示其是一个异常类。
(2)标记值
标记值扩展了UML构造型的特性,可以用来创建构造型的说明信息。
标记值扩展机制
上图中使用注解的方式对InValidValue类进行版本和作者的说明。
(3)约束
约束用来对构造块添加新规则或修改现有规则,约束一般放在一对花括号内。
约束扩展机制
上图中在类关系时给Person添加的约束。
本文详细介绍了UML中的事物、关系和公共机制,也是“UML通用知识上”的全部内容,关于UML中的视图和图将在下一篇文章“UML通用知识下”进行介绍。希望这些内容系统、全面,由简到繁,有理论有实践的文章能为你的学习路上锦上添花。