UML参考手册 第二部分 基 本 概 念 第11章 扩 展 机 制 11.1 概述 UML提供了几种扩展机制,允许建模者在不用改变基本建模语言的情况下做一些通用的扩展。这些扩展机制已经被设计好,以便于在不需理解全部语义的情况下就可以存储和使用。由于这个原因,扩展可以作为字符串存储和使用。对不支持扩展机制的工具来说,扩展只是一个字符串,它可以作为模型的一部分被导入、存储,还可以被传递到其他工具。我们期望后端工具设计成能够处理各种扩展,这些工具会为它们需要理解的扩展定义特定的语法和语义。 这种扩展的方法很可能不能满足出现的多种要求,但是它以一种易于实现的简单方式容纳建模者对UML裁制的大部分要求。 扩展机制包括约束、标记值和构造型。 一定要记住扩展是违反UML的标准形式的,并且使用它们会导致相互影响。在使用扩展机制之前,建模者应该仔细权衡它的好处和代价,特别是当现有机制能够合理工作时。典型地,扩展用于特定的应用域或编程环境,但是它们导致了UML方言的出现,包括所有方言的优点和缺点。11.2 约束 约束是用文字表达式表示的语义限制。每个表达式有一种隐含的解释语言,这种语言可以是正式的数学符号,如set-theoretic表示符号;或是一种基于计算机的约束语言,如OCL;或是一种编程语言,如C++;或是伪代码或非正式的自然语言。当然,如果这种语言是非正式的,那么它的解释也是非正式的,并且要由人来解释。即使约束由一种正式语言来表示,也不意味着它自动为有效约束。 约束可以表示不能用UML表示法来表示的约束和关系。当陈述全局条件或影响许多元素的条件时约束特别有用。 约束用大括弧内的字符串表达式表示。约束可以附加在表元素、依赖关系,或注释上。图11-1表示了几种约束。 图11-1 约束11.3 标签值 标记值是一对字符串—一个标记字符串和一个值字符串—存储着有关元素的一些信息。标记值可以与任何独立元素相关,包括模型元素和表达元素。标记是建模者想要记录的一些特性的名字,而值是给定元素的特性的值。例如,标记可以是author,而值是对元素负责的人的名字,如Charles Babbage。 标记值可以用来存储元素的任意信息,对于存储项目管理信息尤其有用的,如元素的创建日期、开发状态、截止日期和测试状态。除了内部元模型属性名外,任何字符串可以作为标记名(这是因为标记和属性在一起会被认为是一个元素的属性并且可以被工具一起访问),而一些标记名已经被预定义了。见第14章)。 标记值还提供了一种方式将独立于实现的附加信息与元素联系起来。例如,代码生成器需要有关代码种类的附加信息以从模型中生成代码。通常,有几种方式可以用来正确地实现模型,建模者必须提供做出何种选择的指导。有些标记可以用做标志告诉代码生成器使用哪种实现方式。其他标记可为加入工具使用,如项目计划生成器和报表书写器。 标记值也可以用来存储有关构造型模型元素的信息(我们将在下面讨论)。 标记值用字符串表示,字符串有标记名、等号和值。它们被规则地放置在大括弧内(如图11-2)。在图表中标记值经常被省略,只显示在下拉表格中。 图11-2 标签值 11.4 构造型 许多建模者希望为了一种特定的应用域裁制一种建模语言,这带来一些风险,因为被裁制的语言不易普遍为人理解,但人们仍然试图这么做。 构造型是在一个已定义的模型元素的基础上构造的一种新的模型元素。构造型的信息内容和形式与已存在的基本模型元素相同,但是含义和使用不同。例如,商业建模领域的建模者希望将商业对象和商业过程作为特殊的建模元素区别开来,这些元素的使用在特定的开发过程中是不同的。它们可以被看作特殊的类—它们有属性和操作,但是在它们与其他元素的关系上和它们的使用上有特殊的约束。 构造型建立在已存在的模型元素基础上,构造型元素的信息内容与已存在的模型元素相同。这样便可允许工具以相同的方式存储和使用新元素和已存在的元素。构造型元素可以有它自己的区别符号,并且这很容易由工具所支持。例如,一个“商业组织”可以有一个看起来像一组人的图标。构造型也可以有一组适用于它的使用的约束。例如,一个“商业组织”可能只能与另一个“商业组织”,而不能与任何其他类联合。不是所有的约束都能被多用途工具自动地确定,但是它们可以被用手动执行或被理解构造型的加入工具确定。 构造型可以用标记值来存储不被基本模型元素所支持的附加特性。 构造型用双尖括号内的文字字符串表示,它可以放在表示基本模型元素的符号的里边或旁边。建模者也可以为特殊的构造型创建一个符号,这个符号替代了原来的基本模型元素的符号。 图11-3 构造型11.5 裁制UML 约束的扩展机制、标记值和构造型使得为了特殊的应用域而裁制UML轮廓成为可能。已经形成了几种轮廓,其描述见附录C。此外用户还提出了其他。这种裁制建模语言的能力意味着应用域的用户可以使建模语言适应应用域的需要,还能够共享在所有领域中通用的概念。