图1:四层元建模体系结构
尽管元建模型体系结构可以扩展成含有附加层的结构,但是这一般是没有用的。附加的元层(如,元元元建模层)之间往往很相似并且在语义上也没有明显的区别。因此,我们把讨论限定在传统的四层元建模体系结构上。
2.元元模型
UML元元模型描述基本的元元类型、元元属性、元元关系,这些都用于定义UML元模型。元元模型实现了下述要求的一个基本设计:强调使用少数功能较强的建模成分,而这些成分易于组合起来表达复杂的语义。尽管在本文档中元元模型的提出和定义
UML
元模型有关,但它被设计在一个方法和技术都相对独立的抽象层次上。因此,
它可以用于其它用途,例如定义 库repositories或者模型转换格式。这些功能在附录3:UML元元模型与MOF和CDIF的一致中做了进一步探讨。
由于在四层元模型体系结构中元层次之间的关系是元递归的,我们需要某些基本的模型概念来定义元元模型本身。因此,我们假定已有以下的元元对象:
元类型
元一般化
元关联
元角色
元属性
与元建模的元递归特性相一致的,这些概念将在后面的元元模型中加以说明。
UML元元模型分成几部分加以描述:
元元对象继承层次(层次图、层次结构)。提供元元对象在元元模型中的分类法。
元元对象。描述这样一些元元对象,它们用于定义元元模型结构上的和行为上的概念。
非对象类型。描述元元模型使用的原始数据类型。
2.1元元对象的继承层次(层次图、层次结构)
用于元元模型的元元对象继承层次(层次图、层次结构)
见图2。
元对象构成了继承层次(层次图、层次结构)的基础:
元对象。元元对象的继承层次(层次图、层次结构)的根,它定义了一个元元属性作为名字(属性name),该名字为所有子类型公用。
元对象是抽象的,而且是元元模型的基本构造块。元对象与元模型的模型元素相似。
继承层次(层次图、层次结构)
中其他的元元对象分别在描述元元模型的不同部分的各小节中加以讨论。
2.2 元元对象
元元模型中的元元对象用于定义结构的和行为的概念。大多数的元元对象被认为是结构上的定义;只有元操作和元参数被认为是行为上的定义。尽管可以避免对元操作和元参数的定义,但由于以下原因,我们仍然把它们包含了进来:1)元操作是用于定义当前元模型的;2)我们相信,行为的元元对象对于表达动态语义是很重要的,而这种能力随着建模的进展将变得愈加重要。
用于定义元元模型的元元对象见图3。这些元元对象包括:
元关联。元对象的一个直接子类型,它表现了元元对象之间的一种双向的语义联系。元关联与元角色一起来定义两类特殊的元元关系:元元聚集和元元组合。它与元模型中的关联相类似。
元限制条件。元对象的一个直接子类型,它表现对一个元元对象的限制条件。元限制条件和元模型中的限制条件相类似。
元成员。元对象的一个直接子类型,它是一个没有添加任何自身元元属性的抽象类型。它从概念上把下面的元属性和元操作子类型组织起来。元成员与元模型中的成员相类似。
元属性。元成员的一个直接子类型,它表现了元元类型的一个命名了的性质。元属性与元模型中的属性相类似。
元操作。元成员的一个直接子类型,它表现了由元类型提供的一种可请求的服务。元操作可以包含零个或多个元元参数。元操作与元模型中的操作相类似。
元模型。元对象的一个直接子类型,它表现了一种组合机制,以此来规定在一个元元模型中使用哪些元元对象。元元模型可以嵌套。元模型(MetaModel)与元模型(metamodel)中的模型相类似。
元参数。元对象的一个直接子类型,它表现了可变的值,该值在一个元元操作中被传递或者返回。元参数与元模型中的参数相类似。
元类型。元对象的一个直接子类型,它表现了这样一些元元实例的集合,它们共享同样的元元操作、抽象元元属性、元元关系和语义。一个元类型可以定义一个元元操作的规格说明而不定义元元操作的实现。作为元类型的反射元元关联,我们定义了元元一般化关系。元类型与元模型中的类型相类似。
元类。元类型的一个直接子类型,它表现了这样一些元元对象的集合,它们共享同样的元元属性、元元操作、元元方法、元元关系和语义。与元类型相反,一个元类可以包含元元操作的实现(如
元元方法)。元类与元模型中的类相类似。
元数据类型。元类型的一个直接子类型,它表现了非对象类型,例如元数和元字符串。元数据类型与元模型中的原始类型相类似。
元角色。元对象的一个直接子类型,它表现了一个元元关联中一个元元类型的特殊行为。元角色与元关联一起来定义两类特定的元元关系:元元聚集和元元组合。它有如下的元元属性:
multiplicity:元多重记号。指定参与一个元关联的元元对象的数目。
isNavigable:元布尔值。表明对于参与的元元对象来说,该元关联是否是可通行的。
isAggregate:元布尔值。如果isAggregate
= true,元元聚集关系就是有效的。
isChangeable:元布尔值。如果附加了说明:isAggregat
=true,isChangeable = false及source的multiplicity =
0..1,那么元元组合关系是有效的。
isOrdered:元布尔值。如果isOrdered
= true,有序的元元关联成为有效的。
2.3 非对象类型
用于定义元元模型的原始数据类型的非对象类型见图4。这些非对象类型包括:
元布尔值(MetaBoolean)。其值为真或假的枚举。
元枚举。
一系列命名的值的列表(列出),作为一个特定的属性类型的取值范围。
元表达式。
一个字符串,经计算可得到一个特定类型的值。
元多重记号(MetaMultiplicity)。一个规格说明,规定了一个集合的基数的允许取值范围。本质上,MetaMultiplicity是非负整数的一个子集(可能是无穷集)。
元名字。用于区分元元对象的字符串。
元数(MetaNumber)。对于所有类型的数的一种概括表示。
元点(MetaPoint)。以元组(x,y,z)形式表示的空间的一个位置。
元字符串。一个文本字符的序列。
元时间(MetaTime)。一个值,它代表时间上一个绝对的或相对的时刻。
元未解释的(MetaUninterpreted)。一个没有实现的元类型的占位符。每一个元未解释的值有一个与之对应的元字符串表示。