目录
1. 简介
1.1 背景
2. 元元模型
2.1 元元对象的继承层次
2.2 元元对象
2.3 非对象类型
3. 小结
图例
图1:四层元模建模型结构
图2:元元对象继承层次
图3:元元对象
图4:非对象类型
在文档UML语义中描述的UML元模型定义了使用UML表示对象模型的完整语义。而它本身是用元递归的方式定义的,即用UML记号表示法和语义的一个子集来说明自己。这样,UML元模型用一种类似于把一个编译器用于编译自己的方式来自扩展。
本文档提供了元模型体系结构的一些背景,并且定义了UML元元模型。体系结构的方法有几点优越性:
通过建立一个体系结构基础,增加了UML元模型的严格性。
它有助于我们对UML元模型中的核心元对象的进一步理解。
它为今后对UML元模型的扩展定义奠定了体系结构基础。
它提供了把UML元模型和其它基于四层元建模体系结构(如:OMG元对象Facility工具,CDIF)的概念统一起来的体系结构基础。
在许多情况下,被称为元模型技术的应用将基于元元模型,而不是元模型。例如,一个用于模型互交换的转换传送格式应当基于一个元元模型,这个元元模型很容易映射到所涉及到的不同的元模型上。因而,有必要对元元模型加以适当的定义。
通常公认的元建模的概念框架基于一个四层的体系结构:
元元模型(meta-metamodel)
元模型(metamodel)
模型(model)
用户对象(user object)
元元建模层(meta-metamodling)构成了元建模(metamodeling)体系结构的基础结构。这一层的主要责任是定义描述元模型的语言。一个元元模型定义了这样一个模型,它比元模型具有更高的抽象级别,而且比它定义的元模型更加简洁。一个元元模型能够定义多个元模型,而每个元模型也可以与多个元元模型相关联。通常所说的相关联的元模型和元元模型共享同一个设计原理和构造,也不是绝对的准则。每一层都需要维持自己设计的完整性。在元元模型层上的元元对象的例子有:元类、元属性和元操作。一个元模型是一个元元模型的实例。元模型层的主要责任是定义描述模型的语言。一般来说,元模型比定义它的元元模型更加精细,尤其是当它们定义动态语义时。在元模型层上的元对象的例子如:类、属性、操作和构件。
一个模型是一个元模型的实例。模型层的主要责任是定义描述信息论域的语言。在建模层上的对象的例子如:StockShare、askPrice、sellLimitOrder和StockQuoteServer。
用户对象(a.k.a.用户数据)是一个模型的实例。用户对象层的主要责任是描述一个特定的信息论域。在用户对象层的对象的例子如:<Acme_Software_Share 98789>、654.56、sell_limit_order和<Stock_Quote_Svr 32123>。
对元建模层的描述的总结见表1。
> 层 说明 例子 元元模型 元建模体系结构的基础构造。定义了描述元模型的语言。 元类、元属性、元操作 元模型 元元模型的实例。定义了描述模型的语言。
类、属性、操作、构件 模型 元模型的实例。定义了描述信息论域的语言。 StockShare,askPrice, sellLimitOrder,StockQuoteServer. 用户对象
(用户数据)模型的实例。定义了一个特定的信息论域。 <Acme_Software_Share 98789>, 654.56,sell_limit_order, <Stock_Quote_Svr 32123> 表1: 四层元建模体系结构
元建模层之间的依赖关系以UML表示法表示如下:
图1:四层元建模体系结构
尽管元建模型体系结构可以扩展成含有附加层的结构,但是这一般是没有用的。附加的元层(如,元元元建模层)之间往往很相似并且在语义上也没有明显的区别。因此,我们把讨论限定在传统的四层元建模体系结构上。
UML元元模型描述基本的元元类型、元元属性、元元关系,这些都用于定义UML元模型。元元模型实现了下述要求的一个基本设计:强调使用少数功能较强的建模成分,而这些成分易于组合起来表达复杂的语义。尽管在本文档中元元模型的提出和定义 UML 元模型有关,但它被设计在一个方法和技术都相对独立的抽象层次上。因此, 它可以用于其它用途,例如定义 库repositories或者模型转换格式。这些功能在附录3:UML元元模型与MOF和CDIF的一致中做了进一步探讨。
由于在四层元模型体系结构中元层次之间的关系是元递归的,我们需要某些基本的模型概念来定义元元模型本身。因此,我们假定已有以下的元元对象:
元类型
元一般化
元关联
元角色
元属性
与元建模的元递归特性相一致的,这些概念将在后面的元元模型中加以说明。UML元元模型分成几部分加以描述:
元元对象继承层次(层次图、层次结构)。提供元元对象在元元模型中的分类法。
元元对象。描述这样一些元元对象,它们用于定义元元模型结构上的和行为上的概念。
非对象类型。描述元元模型使用的原始数据类型。
用于元元模型的元元对象继承层次(层次图、层次结构) 见图2。 元对象构成了继承层次(层次图、层次结构)的基础:
元对象。元元对象的继承层次(层次图、层次结构)的根,它定义了一个元元属性作为名字(属性name),该名字为所有子类型公用。 元对象是抽象的,而且是元元模型的基本构造块。元对象与元模型的模型元素相似。
继承层次(层次图、层次结构) 中其他的元元对象分别在描述元元模型的不同部分的各小节中加以讨论。
元元模型中的元元对象用于定义结构的和行为的概念。大多数的元元对象被认为是结构上的定义;只有元操作和元参数被认为是行为上的定义。尽管可以避免对元操作和元参数的定义,但由于以下原因,我们仍然把它们包含了进来:1)元操作是用于定义当前元模型的;2)我们相信,行为的元元对象对于表达动态语义是很重要的,而这种能力随着建模的进展将变得愈加重要。
用于定义元元模型的元元对象见图3。这些元元对象包括:
元关联。元对象的一个直接子类型,它表现了元元对象之间的一种双向的语义联系。元关联与元角色一起来定义两类特殊的元元关系:元元聚集和元元组合。它与元模型中的关联相类似。
元限制条件。元对象的一个直接子类型,它表现对一个元元对象的限制条件。元限制条件和元模型中的限制条件相类似。
元成员。元对象的一个直接子类型,它是一个没有添加任何自身元元属性的抽象类型。它从概念上把下面的元属性和元操作子类型组织起来。元成员与元模型中的成员相类似。
元属性。元成员的一个直接子类型,它表现了元元类型的一个命名了的性质。元属性与元模型中的属性相类似。
元操作。元成员的一个直接子类型,它表现了由元类型提供的一种可请求的服务。元操作可以包含零个或多个元元参数。元操作与元模型中的操作相类似。
元模型。元对象的一个直接子类型,它表现了一种组合机制,以此来规定在一个元元模型中使用哪些元元对象。元元模型可以嵌套。元模型(MetaModel)与元模型(metamodel)中的模型相类似。
元参数。元对象的一个直接子类型,它表现了可变的值,该值在一个元元操作中被传递或者返回。元参数与元模型中的参数相类似。
元类型。元对象的一个直接子类型,它表现了这样一些元元实例的集合,它们共享同样的元元操作、抽象元元属性、元元关系和语义。一个元类型可以定义一个元元操作的规格说明而不定义元元操作的实现。作为元类型的反射元元关联,我们定义了元元一般化关系。元类型与元模型中的类型相类似。
元类。元类型的一个直接子类型,它表现了这样一些元元对象的集合,它们共享同样的元元属性、元元操作、元元方法、元元关系和语义。与元类型相反,一个元类可以包含元元操作的实现(如 元元方法)。元类与元模型中的类相类似。
元数据类型。元类型的一个直接子类型,它表现了非对象类型,例如元数和元字符串。元数据类型与元模型中的原始类型相类似。
元角色。元对象的一个直接子类型,它表现了一个元元关联中一个元元类型的特殊行为。元角色与元关联一起来定义两类特定的元元关系:元元聚集和元元组合。它有如下的元元属性:
multiplicity:元多重记号。指定参与一个元关联的元元对象的数目。
isNavigable:元布尔值。表明对于参与的元元对象来说,该元关联是否是可通行的。
isAggregate:元布尔值。如果isAggregate = true,元元聚集关系就是有效的。
isChangeable:元布尔值。如果附加了说明:isAggregat =true,isChangeable = false及source的multiplicity = 0..1,那么元元组合关系是有效的。
用于定义元元模型的原始数据类型的非对象类型见图4。这些非对象类型包括:
元布尔值(MetaBoolean)。其值为真或假的枚举。
元枚举。 一系列命名的值的列表(列出),作为一个特定的属性类型的取值范围。
元表达式。 一个字符串,经计算可得到一个特定类型的值。
元多重记号(MetaMultiplicity)。一个规格说明,规定了一个集合的基数的允许取值范围。本质上,MetaMultiplicity是非负整数的一个子集(可能是无穷集)。
元名字。用于区分元元对象的字符串。
元数(MetaNumber)。对于所有类型的数的一种概括表示。
元点(MetaPoint)。以元组(x,y,z)形式表示的空间的一个位置。
元字符串。一个文本字符的序列。
元时间(MetaTime)。一个值,它代表时间上一个绝对的或相对的时刻。
元未解释的(MetaUninterpreted)。一个没有实现的元类型的占位符。每一个元未解释的值有一个与之对应的元字符串表示。
UML元元模型形成了 UML元模型的元建模体系的基础结构。特别的,它为描述 UML元模型的语言定义了语法和语义。它的基本设计要求强调使用少数功能较强的建模成分,而这些成分易于组合起来表达复杂语义。
在元元模型中定义的多数元元对象被看作结构上的定义。只有元操作和元参数被看作是行为上的定义。这些元元对象之所以被包含在元元模型中,是因为:1)元操作是用于定义当前元模型的;以及2)我们相信行为化的元元对象对于表达动态语义是很重要的,而这种能力将随着建模的进展变得愈加重要。今后我们也许会考虑使之包含其他行为化的元元对象,例如元方法和元事件。
尽管这里元元模型的提出涉及到对UML元模型的定义,但它是被设计在一个方法和技术都独立的抽象层次上的。因而,它可用于其他的目的,例如定义库或者模型交换格式。在附录3:UML元元模型和MOF及CDIF的一致里叙述了这些功能并把UML、MOF和CDIF元元模型作了比较。