UML2面向对象分析与设计(第2版)
上QQ阅读APP看书,第一时间看更新

2.3 UML 2组成结构

与UML 1.x不同,为了更清楚地表达UML的结构,从UML 2开始,整个UML规范被划分成基础结构和上层结构两个相对独立的部分,基础结构(Infrastructure)是UML的元模型,它定义了构造UML模型的各种基本元素;而上层结构(Superstructure)则定义了面向建模用户的各种UML模型的语法、语义和表示。然而,从UML 2.5开始,为了消除冗余并简化UML规范,基础结构部分不再作为UML规范的一部分,UML元类在UML规范相应的部分中被完整地定义。

2.3.1 UML语法结构

UML的抽象语法使用UML元模型来定义,而这个元模型本身也是用UML来定义的(准确地说,是一个受限的UML子集,这个子集符合OMG的MOF规范)。这在严谨的数学家眼里可能是一件不可思议的事情(一个新的概念是用它自己的语法结构来定义的),但工程师认为,只要能够表达清楚所需要的语法概念即可。在UML规范中,主要采用UML类图来描述各元素的抽象语法,采用约束机制和自然语言(文本)来描述模型语义。有关UML语法结构的具体内容,本书将在第2.4节中以概念模型的方式来介绍。下面仅以“类”这个最基本概念为例,介绍其在UML规范中是如何被定义出来的。

图2-2是UML规范中“类”的抽象语法结构。该图清晰地描述了一个类的组成结构,还通过端点名(关联关系两端的文字)和约束规则(大括号中的文字)限定语法和语义。通过该图,可以看出类(Class)是EncapsulatedClassifier和BehavioredClassifier两个抽象分类器的具体实现。类的目的是描述对象的分类,并定义了那些刻画对象结构和行为的特征。类由内部分类器(nestedClassifier)、属性(ownedAttribute)、操作(ownedOperation)和响应(ownedReception)四部分组成;此外,可以指定其父类(superClass)、定义其扩展(extension),还可以指定其是否为抽象类(isAbstract)、是否为主动类(isActive)。

图2-2 类的元模型

需要注意的是,此处类的元模型结构比第1章介绍的类结构更复杂,第1章只介绍了类最常用的属性和操作两个部分;此处描述的是完整的类组成结构,包括4个组成部分,除了属性和操作之外,还包括内部分类器和响应。内部分类器是指这个类的内部包含其他类或分类结构,如汽车由发动机、车轮等部件组成,则在建模汽车类时,发动机、车轮等就是其内部分类器,这些内部分类器间的关系可以通过组合结构图进一步描述。类的响应是指类中用于响应异步事件处理的操作函数,这个概念在之前的UML版本中并没有,最早是出现在UML的扩展语言SysML中的,后来被引入UML 2.5中。在界面处理程序中,按钮的单击响应事件(Click)函数就可以建模成界面类的响应。

2.3.2 UML语义结构

UML自身的语义与被建模系统的UML模型上所声明的标准含义有关,有时被称为UML运行时语义。通常,我们可以把UML模型划分为两类语义域。

(1)结构语义(Structural Semantics)定义了在建模域中关于个体的UML结构化模型元素的含义,这个含义可能只在某个特定的时间点是正确的。该类别有时也称为静态语义。

(2)行为语义(Behavioral Semantics)定义了在建模域中关于个体如何随着时间变化而做出不同行为的UML行为模型元素。该类别有时也称为动态语义。

图2-3来自UML 2.5规范,列出了UML语义域分层的详细分解结构。UML 2.5规范文本的主体内容就是按照该结构组织的。

图2-3 UML语义域

UML结构语义为行为语义提供基础,通过结构化建模所规定的模型元素的状态变化而形成行为语义的概念。UML结构模型建立在一个通用的基础结构(Common Structure)之上,包括类型、命名空间、关系和依赖等概念。Common Structure具体的建模元素包括不同的分类器(Classifiers),这包括数据类型、类、信号、接口和构件等;此外还包括简单的值类型(Values)和包(Packages)等。

构建在基础结构之上的UML基本行为语义为行为的执行提供了一个基本框架,通用行为(Common Behavior)语义还定义了结构化对象之间通过相关行为产生的通信。动作(Actions)是UML中的基本行为单元,用于定义细粒度的行为;在此基础上形成高层次的行为机制,包括状态机(State Machines)、活动(Activities)和交互(Interactions)等。

此外,还提供了一些既有结构化又有行为的辅助建模结构,包括用例(Use Cases)、部署(Deployments)和信息流(Information Flows)。