1第14章UML扩展机制为了避免UML语言整体的复杂性,UML并没有吸收所有面向对象的建模技术和机制,而支持自身的扩展和调整。这就是扩展机制(extensibilitymechanism),通过该扩展机制用户可以定义使用自己的元素。UML扩展机制由三部分组成:构造型(stereotype)、标记值(taggedvalue)和约束(constraint)。在许多情况下UML用户利用该扩展机制对UML进行扩展,使其能够应用到更广泛的领域。2本章学习要点:•理解UML四层体系结构•掌握四层体系结构间的关系•了解元元模型层和元模型层•理解UML核心语义•掌握构造型的表示方法•熟悉UML标准构造型•掌握标记值表示方法•了解UML标准标记值•掌握约束的表示方法•理解UML标准约束314.1UML的体系结构•按照面向对象的问题解决方案以及建立系统模型的要求,UML语言从四个抽象层次对UML语言的概念、模型元素和结构进行了全面定义,并规定了相应的表示法和图形符号。UML的四层体系结构就从这四个抽象层次演化而来。414.1.1四层体系结构•UML具有一个四层的体系结构,每个层次是根据该层中元素的一般性程序划分的。从一般到具体,四层分别为:元元模型层(Metametamodel)、元模型层(Metamodel)、模型层(Model)和用户模型层(UserModel)。UML四层体系结构的示意图。UsermodelMetametamodelMetamodelModelInstanceofInstanceofInstanceofInstanceofM3M2M1M014.1.2元元模型层•UML的元元模型层是UML的基础结构,基础结构由包Infrastructure表示。元元模型描述基本的元元类、元元属性和元元关系,它们都用于定义UML的元模型。基础结构库包由核心包(Core)和外廓包(Profile)组成。核心包包括了建立元模型时所用的核心概念;外廓包中定义了定制元模型的机制。Infrastructure包的结构。5InfrasturctureProfilesCore14.1.3元模型层•UML的元模型层是元元模型层的实例,它由UML包的内容来规定,又可以将UML中的包分为结构性建模包和行为性建模包。包之间存在相互依赖,形成循环依赖性,该循环依赖性是由于顶层包之间的依赖性概括了其子包之间所有的联系。子包之间是没有循环依赖性的,显示了UML中包的结构。6CommonBehaviorsClassesProfilesUserCasesInterfacesStateMachinesCompositeStructuresComponentsDeploymentsActivitiesActionsAuxiliaryConstructsmetamodelUML14.2UML核心语义•要实现用户自定义扩展,必须熟悉UML语义,至少要熟悉UML核心语义。在定义自己的扩展之前了解一下基本的UML核心语义是非常有帮助的。这里将简单介绍UML核心语义,这将有助于对UML底层模型的理解。•元素是UML大多数成分的抽象基类,它是一个基础,在此之上可以附加一些其他机制。元素又可以被专有化为:模型元素、视图元素、系统和模型。模型元素是被建模系统的一个抽象,如类、消息、节点和事件等。视图元素是一个映射,单个模型元素或一组模型元素的文字或图形映射,它可以是文字或图形符号。714.3构造型构造型是一种优秀的扩展机制,它把UML中已经定义元素的语义专有化。并且能够有效地防止UML变得过于复杂。构造型扩展机制不是给模型元素增加新的属性或约束,而是在原有模型元素的基础上增加新的语义或限制。构造型在原来模型元素的基础上添加了新的内容,但并没有更改模型元素的结构。814.3.1表示构造型•构造型可以基于所有种类的模型元素:类、节点、组合、注释、关联、泛化和依赖等都可以用来作为构造型的基类。表示构造型时,将构造型名称用一对源码括号括起来,然后放置在构造型模型元素名字的邻近。构造型可以有自己的图形表示符号,如数据库可以用圆柱型图标表示,演示了构造型图标。9Database构造型Database构造型图标14.3.2UML标准构造型•UML中已经预定义了多种标准构造型,用户在这些标准构造型的基础上定义自己的构造型。1014.3.3数据建模•在进行数据建模时通常使用的建模工具是ERWin、PowerDesigner和ERStudio等。而UML具有强大的功能,同样可以使用UML进行数据建模。此时就需要使用扩展机制,对于关系型数据库来说,可以用类图描述数据模库模式,用类描述数据库表,用操作描述触发器和存储过程。•进行数据库设计时有一些关键概念需要使用UML来表示,它们是模式、主键、外键、域、关系、约束、索引、触发器、存储过程和视图等。1114.3.4Web建模和业务建模扩展•Web应用程序建模时需要利用UML的扩展机制对UML的建模元素进行扩展,对Web建模主要是利用了UML的构造型这个扩展机制,在类和关联上定义一些构造型以解决Web应用系统建模的问题。其中WAE(WebapplicationextensionforUML)扩展方法影响比较大。WAE定义了一些常见的Web建模元素的版型,如果我们在开发中遇到WAE没有提供的版型,完全可以根据UML的扩展机制定义自己的构造型。1214.4标记值•性质通常用于表示元素的值,增加模型元素的有关信息。标记值明确地把性质定义成一个“名—值”对,这些“名—值”对存储模型元素相关信息。机器通过这些信息以某种方式处理模型。例如模型中性质可以代码生成的参数,告诉代码生成器生成何种类型的代码。•使用标记值的目的是赋予某个模型元素新的特性,而这个特性不包括在元模型预订义的特性中。与构造型类似,标记值只能在已存在的模型上扩展,而不能改变其定义结构。1314.4.1表示标记值•标记值用字符串表示,字符串有标记名、等号和值。标记值把性质明确地定义成一个“键—值”对,其中键为标记。每个标记代表一种性质,并且能够应用于一个以上的元素,性质都用大括号括起来,一个标记对应一个值,如下所示:•{tag=value}or{tag1=value1,tag2=value2}or{tag}14.4.2标记值应用元素•文献(Documentation)是给元素实例进行建档的标记,其值是字符串。通常这个标记值是单独显示的,并不与元素放在一起。如在某些软件或工具中,其值是显示在一个性质或文献窗口中。类Abstract附加在文献标记值可以是对该类的描述:•Thisclasscaninheritonly.•对于类型、实例、操作和属性共有九种标记值可以使用,它们分别是:•不变性(invariant)应用于类型,它指定了类型实例在整个生命周期中必须保持一种性质,这个性质通常对于该类型实例必须有效的一种条件。•后置条件(postcondition)应用于操作,它是操作结束后必须为真一个条件,该值没有解释通常也不显示在图中。14.4.3自定义标记值•标记值是由“键”即标记和“值”即某种类型组成,可以连接到任何元素上,用来为这些元素加上一些新的语义。标记值是有关模型和模型元素的附加信息,在最终的系统中是不可见的。自定义标记值时可以按照以下步骤进行:•(1)确定要定义标记值的目的。•(2)定义需要标记值的元素。•(3)为标记命名。•(4)定义值类型。•(5)根据使用标记值对象(人或机器)的不同,适当定义标记值。•(6)在文档中给出一个以上使用该标记值的例子。14.4.4UML标准标记值•前面曾经介绍UML中预定义的标准构造型,同样UML中也预定义了标准标记值。在自定义标记值时,可以通过标准标记值进行扩展。14.5约束•约束是元素的一种语义条件或限制,它应用于元素。一条约束应用于同一种类的元素,因此一条约束可能涉及许多元素,但它们都必须是同一类元素。约束的每个表达式有一种隐含的解释语言,这种语言可以正式的数学符号,如集合的符号;也可是一种基于计算机的约束语言,如OCL;可以是一种编程语言如C、C++等;还可以是伪代码或非正式的自然语言。14.5.1表示约束•约束是一种限制,这种限制限定了该模型元素的用法或语义。与构造型相类似,约束出现在几乎所有UML图中,它定义了保证系统完整性的不变量。约束定义的条件在上下文中必须保持为真。14.5.2UML标准约束•UML中同样预定义了一些标准约束,用户可以扩展UML中的标准约束来创建自定义的约束。14.5.3自定义约束•约束是UML的扩展机制之一,与构造型和标记值相同用户也可以自定义约束。自定义的约束通过条件或语义限制来影响元素的语义。所以当自定义约束时,一定要仔细分析约束所带来的影响。自定义约束时需要做好以下工作:•描述需要约束的元素。•分析该元素的语义影响。•给出一个或多个使用该约束的例子。•说明如何实现约束。