通过与具有公共特征的模式取得一致,可以使一座建筑更为简单和更为协调。
对于 UML 也是如此。
由于在 UML 中有 4 种贯穿整个语言且一致应用的公共机制,因此使得 UML 变得较为简单。
这 4 种机制是:
(1)详述
(2)修饰
(3)通用划分
(4)扩展机制
详述
UML 的详述提供了语义底版,它包含了一个系统的各个模型的所有部分,各部分以一致的方式相互联系。
因此,UML 的图只不过是对底版的简单视觉投影,每个图展现了系统的一个特定的关注方面。
修饰
UML 中的大多数据元素都有唯一的和直接的图形表示符号,这些符号对元素的最重要的方面提供了可视化的表示。

UML 表示法中的每一个元素都有一个基本符号,可以把各种修饰细节加到这个符号上。
通用划分
在面向对象系统建设中,通常有几种划分方法。
第一种方法是对类和对象的划分。
类是一种抽象,对象是这种抽象的一个具体表现。
在UML 中,可以对垒和对象建立模型,在图形上,UML是这样辨别对象的:
用与类同样的图形符号来表示对象,并且在对象名下面画一道线。

在这个图中,有一个名称未 Customer 的类,它由 3 个对象,分别为 Jan (它被明确地标记为 Customer 的对象),:Customer (匿名的 Customer 对象)和 Elyse (它在详述中被说明为是一种 Customer 对象,尽管在这里没有明确地表示出来)。
UML 的每一个构造块几乎都存在像类/对象这样的二分法。
例如,可以有用况和用况执行、构件和构件实例、节点和节点实例等。
第二种方法是接口和实现的分离。
接口声明了一个合约,而实现则表示了对该合约的具体实施,它负责如实地实现接口的完整语义。
在UML 中,既可以对接口建模又可以对它们的实现建模,如:

在这个图中,有一个名称为 SpellingWizark.dll的构件,它实现了接口 IUnKnown 和 接口 ISpelling,并且还需要一个由其他构件提供的名为 IDictionary 的接口。
几乎每一个 UML 的构造块都有象接口 / 实现这样的二分法。例如,用况和实现它们的协作,操作和实现它们的方法。
第三种方法是类型和角色的分离。
类型声明了实体的种类(如对象、属性和参数),角色描述了实体在语境中的含义(如类、构件或协作等)。
任何作为其他实体结构中的一部分的实体(例如属性)都具有两个特性:从它固有的类型派生出一些含义,从它在语境中的角色派生出一些含义,如下图:

扩展机制
UML 提供了一种绘制软件蓝图的标准语言,但是一种闭合的语言即使表达能力再丰富,也难以表示出各种领域中的各种模型在不同时刻所有可能的细微差别。
由于这个原因,UML 是目标开放的,使人们能够以受控的方式来扩展语言。
UML 的扩展机制包括:
- 衍型
- 标记值
- 约束
衍型 (stereotype)扩展了 UML的词汇,可以用来创造新的构造块,这个新构造块既可从现有的构造块派生的,又专门针对要解决的问题。

标记值 (tagged value)扩展了UML 衍型的特性,可以用来创建衍型的详细新信息。
例如,如果在制作以盒装形式销售的产品,随着时间的推移,它经过了多次发行,那么经常会想要跟踪产品的版本和对产品做评论性摘要的作者。
如上图,在类Eventqueue 上明确标记了版本和作者,这样就对该类进行了扩展。
约束 (constraint)扩展了 UML 构造块的语义,可以用来增加新的规则或修改现有的规则。
例如,可能想约束类 Eventqueue,以使所有的增加都按序排列。
如上图,对操作 add 增加了一个约束,及{ordered},以明确标示这一规则。