目錄
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元元模型作了比較。
原文轉自:http://www.anti-gravitydesign.com