
2.4.1 UML的通用机制
UML提供了一些通用的公共机制,使用这些通用的公共机制(简称通用机制)能够使UML在各种图中添加适当的描述信息,从而完善UML的语义表达。通常,使用模型元素的基本功能不能够全面地表达所要描述的实际信息,这些通用机制可以有效地帮助更加全面的表达,以助于我们进行更有效的UML建模。UML提供的这些通用机制,贯穿于整个建模过程的方方面面。前面提到,UML的通用机制包括规格说明、修饰和通用划分三个方面,下面分别对这三个方面进行说明。
1.规格说明(Specification)
如果把模型元素当成一个对象来看待,那么模型元素本身也应该具有很多的属性,这些属性用于维护属于该模型元素的数据值。属性是使用名称和标记值(Tagged Value)来定义的。标记值指的是一种特定的类型,可以是布尔型、整型或字符型,也可以是某个类或接口的类型。UML中对于模型元素的属性有许多预定义说明,例如在UML类图中的Export Control,这个属性指出该类对外是Public、Protected、Private还是Implementation。有时候也将这个属性的具体内容称为模型元素的特性。
模型元素的实例需要附加的相关规格说明来添加模型元素的特性,最简单的方式是用鼠标双击某个模型元素,然后弹出一个关于该元素规格说明的窗口,在这个窗口内显示了该模型元素的所有特性。如图2-25所示,它是一个关于类的规格说明。
2.修饰(Adornment)
在UML的图形表示中,每一个模型元素都有一个基本符号,这个基本符号可视化地表达了模型元素最重要的信息。用户也可以把各种修饰细节加到这个符号上以扩展它的含义。这种添加修饰细节的做法可以使图中的模型元素在视觉效果上发生一些变化。例如,在用例图中,使用特殊的小人来表达Business Actor,如图2-26所示。该表示方法相对于参与者的表示发生了颜色和图形方面的细微变化。

图2-25 类的规格说明示例

图2-26 Business Actor图形表示
不仅在用例图中,在其他的一些图中也可以使用修饰,例如,在类图中,把类的名称用斜体来标识以表示该类是抽象类等。这类修饰的用法,在这里就不一一举例了。
另外,有一些修饰包含了对关系多重性的规格说明。这里的多重性是指用一个数值或一个范围来指明关联到一定数目的实例。在UML图中,通常用修饰来添加信息并放在元素的旁边。如图2-27所示,这里的修饰表达了一个教师可以教一位到多位学生。
在UML众多的修饰符中,还有一种修饰符是比较特殊的,那就是前文提到的注释(Note)。注释是一种非常重要的并且能单独存在的修饰符,用它可以附加在模型元素或元素集上用来表示约束或注释信息。如图2-28所示,这是对图书类的注释示例。

图2-27 有数目关系的修饰示例

图2-28 对于图书类的注释示例
3.通用划分(General Division)
通用划分是一种保证不同抽象概念层次的机制。通常可以采用两种方式进行通用划分,一种是对类和对象的划分,另外一种是对接口和实现的分离。类和对象的划分是指类是一个抽象而对象是这种抽象的实例化。接口和实现的分离是指接口声明了一个操作接口,但是却不实现其内容,而实现则表示了对该操作接口的具体实现,它负责如实地实现接口的完整语义。
类和对象的划分保证了实例及其抽象的划分,从而使得对一组实例对象的公共静态和动态特征无需一一管理和实现,只需要抽象成一个类,通过类的实例化实现对对象实体的管理。接口和实现的划分则保证了一系列操作的规约和不同类对这些操作的具体实现。