摘要:在MDA場景下,元模型是實現平臺無關模型和平臺相關模型轉換的核心。提出通過元層模型和模型層模型的DownUp機制給出可復用的MOF元建模框架。元建模框架由MOF BootStrap模型自舉,并且內置MOF Model,此框架可在任意多層元建模中復用。此外,給出了模型工程模型和模型遷移剪枝算法,并提出了采用模型工程統一對象空間實現模型實例復用的方法。此框架的研究對于指導具體建模工具的實現有重要意義。
關鍵詞:MOF; 元建模; 框架; 復用
中圖法分類號:TP311.5文獻標識碼:A
文章編號:1001-3695(2007)01-0094-03
1背景簡介
計算機網絡將人們使用的數據資源和應用程序連接起來,這使得人們更加向往不受地域限制透明地進行應用程序間的數據交換。但是,不同系統間不一致的元數據已經成為數據交換的主要限制。許多應用程序使用了元數據的私有模型,元數據模型間的不同阻止了跨越應用程序界限的數據交換,解決元數據模型間的不同將能促進需要交換數據的應用程序間的集成。MOF(MetaObject Facility)是OMG的一個標準,它提供了一個元數據的管理框架和一套元數據服務,使得模型與元數據的互操作和開發成為可能。OMG有許多標準,如UML,MOF,CWM,SPEM,XMI和各種UML Profile[1]。為了進行數據交換和元數據管理都使用了MOF和MOF的派生技術,如JMI(Java Metadata Interface)[2]。MOF的重要貢獻是提供了OMG的MDA核心規范,它是建立在已經制定的UML規范基礎上,引入了元模型和元數據PIM(Platform Independency Model)的概念和從PIM到PSM (Platform Specific Model)的映射。
典型的MOF元建模框架分為四層,如圖1所示。元模型層從M0向上編號,M1層為
M0的模型,又稱為M0的元數據層或描述M0的語言;M2層為M1層的模型,為模型的模型,又稱為元模型層;最頂層為MOF模型層,MOF模型由MOF內含的一個核心層自我描述,不需要別的模型對MOF進行描述,所以MOF層為最頂層。
圖1典型MOF四層模型
圖1四層模型的概念是元層描述的實例,分層建模的關鍵是Classifier和Instance或Class和Object,從一個Instance導覽到它的Metaobject(Classifier)的能力。這個基本概念能被用于處理任何數目的元層次,就是說,元層不僅限于四層,可能多于四層,也可能少于四層。目前大多數系統用了小數目的元層次,如兩層的通用反射系統 Class/Object,三層的關系數據庫系統SysTable/Table/Row, 四層的MOF/UML/User Model/userObject。隨著語言驅動開發[3]和面向語言開發[4]的提出,我們更加需要不同的元模型語言來描述不同階段的抽象模型。
MOF規范2.0版本于2003年10推出,目前還沒有真正支持MOF 2.0元建模的工具,EclipseEMF[5]是最接近MOF 2的EMOF元建模工具,但是它僅支持上面典型四層結構的M2和M1層建模。其他工具如GME[6],MetaEdit[7],DOME[8]等采用了私有的元模型進行元建模,也是僅僅處理M2和M1的元層建模。關于可復用MOF元建模的研究,在實踐方面,目前沒有完全支持MOF 2的工具;在理論的研究方面,雖然OMG提供了規范,但是還沒有人進行可復用MOF框架實踐方面的指導研究。本文提出元建模的DownUp元建模框架、模型工程、模型對象復用、模型遷移剪枝算法,為元建模實踐提供了理論指導。
2可復用的元建模框架
2.1原理
早在1979年的文獻 [9]中描述的Gold Braid架構就強調了元模型、模型和實例都是以實例化為基礎的相對概念之間的關系。Gold Braid架構強調了類和對象間的關系,一個類可以被實例化建立一個對象,這個對象是這個類的實例;也可以是一個對象的子類,即一個類能被另外一個類(元類)實例化,但是Gold Braid只是闡述了同構關系框架的基本原則,并不涉及如何構建可復用的元建模框架。可復用的MOF元建模框架基于這個基本原則,以統一的方式構建滿足任意層次的模型元建模框架,此框架的結構如圖2所示。這個框架采用元層和模型層的DownUp機制,實現了元層描述模型層和模型層上升注冊到元層并進一步采用框架描述新的模型層。
圖2可復用的元建模框架DownUp原理
兩級DownUp原理如下:
在元層,初始模型為MOF Model,通過Down過程實例化MOF Model,生成MOF模型實例模型n(如UML MetaModel),模型n如果能夠繼續建模下一層模型實例,必須通過Up過程把模型n升級并注冊到元層形成元模型n,然后通過元模型n描述模型n-1。依此類推,可進行無層次限制元建模。
2.2BootStrap模型和初始化模型
可復用的MOF元建模結構的初始模型為MOF模型,MOF模型是自我描述的,MOF模型需要其核心模型Down實例化后形成MOF模型,我們稱這個核心模型為可復用MOF建模框架的BootStrap模型。這個模型應該足夠簡單,它不需要任何模型去描述它,可復用架構的所有模型元素都是其直接或間接的實例。MOF 2.0規范沒有這個模型,本文給出了這個模型,如圖3所示,BootStrap模型僅含有一個模型元素Element。BootStrap模型實例化了MOF模型的EMOF和CMOF,從而MOF模型實現了真正的自描述。BootStrap模型的存在,使得可復用的元建模框架能夠以統一的方式實現元層模型和模型層模型的建模,完善了MOF模型的自描述理論。
2.3模型工程模型
在可復用MOF元建模框架的Down和Up建立模型過程中,為了維護元層和模型層之間的關系以及模型層模型元素實例在Up并注冊到元層后能被重用,我們引入模型工程模型的概念。模型工程模型為描述模型工程的模型,如圖4所示。工程模型由模型和模型關系以及統一對象空間組成。Model包括元層模型和模型層模型,ModelAssociation表達元層模型和模型層的Down和Up關系;統一對象空間(UniObjectSpace)為系統所有實例化元素的統一命名空間,任何模型注冊到元層就是注冊到模型工程的統一對象命名空間,通過統一對象命名空間實現模型層模型元素對象的復用,UniObjectSpace在2.5模型Up中被詳細說明。通過模型工程模型可以進行同一工程模型的元層和實例化層的連續反射和實例化追蹤。在Model中,缺省模型為MOF BootStrap(isBootStrap 為 True)和MOF Model (isSystem 為 True),缺省的ModelAssociation的對象鏈為(MOF BootStrap (Up)MOF Model(Down)),它的isSystem為True,從MOF Model新建立的MetaUML的ModelAssociation的對象鏈為(MOF Model(Up)MetaUML(Down)),isSysetm 為False。
圖3MOF BootStrap模型及自描述原理
圖4模型工程模型
2.4元模型的Down
元模型的Down主要是指通過元模型描述模型的技術,也就是如何用元模型來描述如UML元模型、UML模型、領域特定語言、領域模型等模型。在可復用MOF元建模框架中,元層模型Down到模型層模型主要包括以下四種方式:
(1)直接實例化元模型
直接實例化元模型為模型層的實例,這種是最簡單的方式,如實例化MOF::Class為MetaUML::Class和MetaUML::Attribute。
(2)Profile元模型,然后實例化
Profile是元模型元素的構造型(Stereotype)集合,構造型為特定的元模型元素賦予了特定方面的方言,這一方言使得用戶更易于交流(如Interface接口被構造型為EJB的Home接口)。通過Profile實例化的模型是DSL(Domain Specific Language)建模,它是MDA環境下的一種主要方式。Profile擴展元模型機制主要特點就是不允許編輯修改現存的元模型(但是允許添加新的約束來具體化Profile),也不允許添加新的模型元素(如構造元模型元素間新的關系),所以又被稱為輕型模型擴展(Lightweight Extension)[10]。
(3)繼承元模型,添加新的屬性實例化
繼承現有的元模型然后實例化,是在元模型元素屬性不滿足具體建模需求時,通過繼承元模型添加需要的屬性后實例化,如StateMachineModel::StateMachine繼承 MOF::Class,并添加startState屬性。這種方式擴展的特點是需要修改元模型層模型后進行擴展,所以這種方式又被稱為重型擴展(Heavyweight Extension)。
(4)標記元模型,實例化
一個標記表達了一個獨立的信息塊,它能被關聯給任意數目的模型元素,一個模型元素能被關聯許多標記。一個標記采用字符串名稱—值對(NameValue)的方式描述。具體模型處理時可以忽略或使用這些標記,這樣可以提供給建模一個靈活的需求,在沒有重定義元模型的情況下,提供了元模型元素的動態擴展。
上面四種方式是創建新的建模語言的主要方法,這四種方法還可以聯合使用以進行模型擴展,如重型擴展+輕型擴展策略、Profile+標記策略等。
MOF 2規范不直接支持Profile的機制,所以基于第一級建模方式不能使用Profile機制(可以通過重型擴展建立Profile元模型,如UML元模型,在新的模型中使用Profile,如UML模型),可以采用其他三種方式進行模型層的實例化。
2.5模型層模型的Up
元模型的Up過程將模型層模型提升為元層模型,將模型層元素對象注冊到統一對象空間。一個模型工程中的不同元層模型和模型層模型都有著實例化和被描述的關系,統一對象空間保存模型工程中所有模型對象以及它們的實例化關系。
統一對象名稱空間在模型對象維度屏蔽了模型元素名稱,給可復用元建模框架的MOF Capabilities[11]帶來的語義歧義和通過復用MOF的元對象設施Capabilities構造無限制元層的模型。通過模型擴展機制Down一個模型,如果這個模型需要作為另一個模型的元模型,就需要模型的Up機制注冊到相應的元模型層。如圖5所示,在模型對象空間的緯度,所有元層或模型層的對象元素都是模型實例維,而所有的模型對象均注冊到模型工程的統一對象空間。新建模型選擇元模型及元模型對象均通過統一對象空間訪問,而元層的對象約束來自于各層模型實例維的相關約束。采用統一對象空間和模型實例空間維使得元建模框架自身也是復用已有建模實例和相關模型的Capabilities。
圖5模型對象到元層的注冊原理
Down過程是模型維的視角,是模型到模型的擴展;Up過程是對象維的視角,是對象到對象的分類和集中,是各種模型對象到統一對象空間的注冊。
3模型遷移同步剪枝算法
在DownUp的元建模框架中,統一的元層和模型層結構是框架可復用的基礎。只有保持元層和模型層模型的一致性才能復用DownUp元建模框架。但是,在Down過程產生的模型被編輯后,基于這個模型Up后的元模型也將隨之發生改變,而基于修改前元模型實例化的模型元信息將會出現不一致,進而下一層模型的元信息也是不一致的,這就需要編輯后的模型在Up注冊時執行一個模型遷移算法,我們把它稱為DownUp的模型遷移同步剪枝算法。模型遷移剪枝算法的結果是給出實例化模型擴展關系中一致的模型。例如圖1所示的模型,如果M2層的Attribute模型元素被刪除,那么Attribute和Class的聚合關系也將被刪掉,通過執行模型遷移同步剪枝算法,M1層的Name和Client的Name的關系鏈將被修剪掉,同時,運行時模型M0的Client對象不會有名字aClient,這樣保證了UML元建模和UML建模過程中模型的一致性。由于模型遷移同步剪枝算法在模型遷移過程中保證了元層模型和模型層模型的一致性,進而能夠在元層和模型層間以統一的、無層次限制的和一致的方式進行元建模。
剪枝算法是個遞歸過程,它不斷修剪下一層模型,直到沒有下一層模型為止,此算法在模型修改重新注冊時被激活。剪枝算法處理流程如下:
(1)取出被修改模型的所有直接下層模型,如果下層模型為空,轉(4)。
(2)對每一個下層模型,遍歷模型的每個模型元素類型是否出現本層模型元素,如果沒有出現,則刪除下層模型元素及相關關系,轉(1),否則轉(3)。
(3)判斷此模型元素關系是否有修改或刪除,如果有,則刪除下層模型元素相關關系,轉(1);否則,如果還有下層模型,轉(2),否則轉(1)。
(4)退出。
下面是通過擴展OCL(Object Constraint Language)[12]實現的模型剪枝算法:
Context ModelProject
@Operation pruningModel(modifiedModel: MOF::Package)
Letelements: Set(MOF::Package)=Self.directedDownModels
In
if elements>isEmpty() then return
else
elements>select(not oclIsKindOf(MOF::Relationship))>
collect(e: MOF::Package|
if not modifiedModel>include(e.element) then
e.eraseElementAndRelationship(e.element)
self.pruningModel(e)
end
elements>select(oclIsKindOf(MOF::Relationship))>
collect(e: MOF::Package|
if not modifiedModel>include(e.element) then
e.eraseRelationship(e.element)
self.pruningModel(e)
end
end
end
@Context Package
@Operation eraseElementAndRelationship(e: MOF::Element)
self.eraseAllRelationship(self>select(p: MOF::Element| p =e)>relationships)
self.eraseElement(e)
end
end
將該算法應用于圖1的模型中,如果在M2層刪除Attri ̄bute模型元素,那么通過剪枝算法,在M1層中Name屬性將被剪掉,M0層的對象名字也會被剪掉。通過模型同步剪枝算法,保證了上下層模型的一致性。
4結論和進一步工作
可復用的MOF元建模框架采用DownUp機制進行元建模,復用了元建模框架,通過給出MOF的BootStrap模型完善了MOF自我描述理論。在模型的Up過程中,通過引入模型工程統一對象空間實現模型實例復用,最后擴展OCL實現了與平臺無關的模型遷移同步剪枝算法。進一步的工作將在可復用MOF元建模框架的研究基礎上實現可復用MOF元建模工具。
參考文獻:
[1]OMG Group. MOF,UML,CWM,SPEM,XMI,UML Profile[EB/OL]. http://www.omg.org/mda/specs.htm,2005.
[2]Sun. JMI[EB/OL].http://java.sun.com/products/jmi/index.jsp, 2005.
[3]Tony Clark, Andy Evans, Paul Sammut, et al. Applied MetaMode ̄ling:A Foundation for Language Driven Development[M].Xactium Inc.,20-04.
[4]Eclipse.EclipseEMF[EB/OL].http://www.eclipse.org/emf/,2005.
[5]Jetbrains.LOP[EB/OL]. http://www.onboard.jetbrains.com/is1/articles/04/10/lop/index.html,2005.
[6]Vanderbilt University. GME [EB/OL] . http://www.isis.vanderbilt.edu/Projects/gme/,2005.
[7]MetaEdit[EB/OL]. http://www.moonglow.com/METAEDIT/,2005.
[8]DOME Research Group[EB/OL]. http://www.src.honeywell.com/dome/,2005.
[9]D R Hofstadter. Goedel, Escher, Bach:An Eternal Golden Braid [M]. New York: Vintage Books,1979.
[10]David S Frankel. Applying MDA to Enterprise Computing [M]. John Wiley Sons, Inc.,2003.
[11]OMG. MOF Specification[EB/OL]. http://www.omg.org/cgibin/apps/doc?ptc/0310-04.pdf,2005.
[12]Jos Warmer, Anneke Kleppe. Object Constraint Language:The Getting Your Models Ready for MDA (2nd edition)[M]. Addison Wesley, 2003.
作者簡介:
蘭慶國(1972),男,講師,博士研究生,主要研究方向為模型驅動開發、通信網絡管理;
劉淑芬(1950),女,教授,博導,主要研究方向為網絡技術、系統結構;張欣佳(1978),男,博士研究生,主要研究方向為網絡技術。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文