摘要:MDA是一種以模型為中心的新的軟件開發模式。可執行UML(xUML)是UML的一個擴展,通過在UML中加入精確的可執行的動作語義,使得建模者可以生成可執行的獨立于平臺的模型,并直接從該模型生成代碼。該文將xUML 與動作語言OAL結合討論,目標是建立可執行的模型,使用這些模型最終可以為目標系統生成高質量的代碼,并用一個實例說明了該方法的使用。
關鍵詞:模型驅動體系架構;可執行UML;平臺無關模型;平臺相關模型;對象動作語言
中圖分類號:TP311.5文獻標識碼:A文章編號:1009-3044(2009)04-0844-03
The Implementation of MDA Based on xUML
LI Li-ping
(Computer and Information Institute,Shanghai Second Polytechnic University,Shanghai 201209,China)
Abstract: MDA is a new software development mode that focuses on model.Executable UML (xUML) is an extension to UML that adds precise execution action semantics to models enabling a full description of platform independent models and the generation of code from them.This paper discuss xUML combine with an action language—OAL.The goal is to build an executable model and these models can eventually be used to generate high-quality code,and gives an example to illustrate the method at the end of the paper.
Key words: MDA;xUML;PIM;PSM;OAL
1 引 言
隨著計算機及網絡技術的飛速發展,需要軟件解決的問題越來越多。軟件業面臨著越來越大的壓力,軟件開發過程變得越來越復雜。為處理這些問題,2001年,對象管理組織(OMG)提出了模型驅動體系架構(MDA,Model Driven Architecture),將軟件系統建立在各種模型的基礎上,通過模型的變換來驅動系統的開發,以便設計出輕便可操作的應用程序[1]。MDA是一種以模型為中心的新的軟件開發模式。目標是要實現從UML企業模型到最終代碼的自動生成。MDA的核心思想是抽象出與實現技術無關的、完整地描述業務功能的平臺無關模型(PIM),然后針對不同實現技術制訂相應的映射規則,再通過這些映射規則將PIM轉換成與具體實現技術相對的平臺相關模型(PSM),最終將PSM轉換成可執行的代碼[1]。
目前國內外對MDA中模型變換的研究很多,但是大多還是處在語法層進行的。本文將PIM表示為可執行UML (xUML,Executable UML),并將xUML 與一門動作語言OAL(Object Action Language)相結合以生成可執行的獨立于平臺的模型,并直接從該模型生成代碼。
可執行UML(xUML)是UML的一個擴展,是UML語言家族中一門獨立的語言。實際上,xUML 是在UML中加入精確的動作語義,從而使得建模者可以生成可執行的系統規約。xUML 與一門完整的動作語言結合就可以使得開發者建立可執行的域模型,使用這些模型可以為目標系統生成高質量的代碼[2],這也是本文研究的目標。
本文的其余部分是這樣安排的:第二部分闡述了xUML 的基本概念;第三部分分析了MDA中的兩種核心模型PIM和PSM。第四部分重點研究了基于xUML的MDA的實現,并介紹了該方法在一個實例的應用;第五部分得出結論。
2 xUML 的基本概念
MDA的指導思想就是一切都是模型,一切由模型驅動。UML在MDA中起到極其重要的作用,是MDA的關鍵實現技術,但UML缺乏精確的和形式化的基礎,只是一種半形式化的語言。語義的不完整性和二義性使得UML模型不能運行。xUML 是用基于精確動作語義的UML動作語言來表達的,是UML的一個子集。xUML是目前各種高級語言更高層次上的抽象,用xUML建立的系統模型獨立于系統實現的技術,理論上運用xUML建立的系統模型可在各種軟件環境下部署實現,而不需要改變其模型本身。如今xUML已經成功應用于模型驅動體系結構多系統的開發[3]。因此xUML 的發展可以說是軟件發展的一種歷史趨勢。xUML的定義如圖1所示[2]。
xUML去掉了UML中語義較弱的元素,如組件圖和部署圖等,而保留了語義較強的元素,包括用況圖、類圖、順序圖和狀態圖等。xUML主要目標是建立可執行的域模型,域是由一組獨有的類組成,其中還包括類的內部結構(類的屬性和操作)。在xUML中,每個類最多有一個狀態圖。xUML主要是對狀態圖的深化。
動作語義旨在向建模者提供一種在UML模型內精確定義行為的方式,它可以描述方法的主題、狀態或狀態圖中狀態間轉移的輸出或與系統狀態相關聯的活動[5]。UML標準中雖然加入了動作語義,但卻沒定義具體的動作語言。現在已出現了多種為xUML設計的動作描述語言,如ASL,OAL,SDL,SMALL等,動作描述語言使建模者可以為xUML的處理行為提供無歧義的、精確的定義[6]。
3 MDA的兩種核心模型
MDA中,模型主要分為兩種:平臺無關模型(PIM)和平臺相關模型(PSM)。在MDA 中,PIM 是基礎和核心。基于MDA 的開發項目都是從創建一個PIM 開始。PIM是一個獨立于任何技術實現的高度抽象模型,它抓住系統的本質特征,清楚地描述了系統作什么。PIM 可能包括描述如何實現需求的一般的函數、場景和類。PIM是一個系統的形式化規范,可以利用UML或其它合適的標記來表示,與具體的技術細節無關。PIM只用來描述業務的功能和行為,它可在相當長的時間內保持其價值,只有在業務需求要求其改變時才需要改變[4]。在本文,為了得到可執行的模型,我們將PIM表示為xUML。相對于PIM的平臺無關性,PSM是平臺相關的。PSM詳細說明系統是如何在一個確定的平臺實現的。PSM包含了所有在PIM 中表示的功能,并且還添加了針對實現平臺的設計思想。
從PIM 轉換到PSM,設計人員需要對不同實現技術制訂多個映射規則,根據這些映射規則將PIM轉換成與特定實現技術及環境相關的PSM;最后將經過PSM轉換成代碼。因為PSM是通過映射從PIM派生出來的,因此人們不必維護或修改PSM,而是從PIM自動生成PSM。如果業務需求有變化,這些變化將在PIM中反映出來并在PIM中測試,然后我們再次運用映射規則來生成新的PSM[5]。在本文中,PIM到PSM的轉換將不再是研究的重點。我們將PIM表示為xUML,并將xUML與OAL結合以生成可執行的獨立于平臺的模型,并直接從該模型生成代碼。
4 基于xUML的MDA實現
xUML是UML的一個子集,它定義了系統最小化的模型。Kennedy[2]將xUML與完整的動作規約語言(ASL,Action Specification Language)一并使用。通過ASL,xUML可以在平臺無關的UML中完全地描述一個系統的全部行為,并實現模型的運行。
我們的研究方法是將xUML與對象動作語言OAL[8]結合使用,用OAL充分詳細地描述模型的行為,以便建立起可執行的模型,并且利用這些模型來生成高質量的代碼。OAL定義的部分動作語法規則見表1。主要包括有對象和屬性動作,關聯動作,選擇和發送信號動作。
運用xUML對一個系統進行建模時,主要包括以下三個模型:概念類模型、類的狀態模型和行為動作模型[7]。這三個模型組成了對一個系統的完整的可執行模型的定義描述。類模型主要描述了系統中類與類之間的靜態關系,包括類的屬性與操作的定義。類的狀態模型主要由狀態圖體現。xUML主要是對狀態圖的深化,通過向狀態圖中添加過程定義,使整個UML模型是計算完備的。
本文以銀行的ATM系統為例來說明如何將xUML與OAL結合使用建立起可執行的模型。圖2顯示了ATM系統的概要類模型,包括CardReader,ATMScreen,Account 和CashDispenser四個類以及類之間的關系。我們重點研究Account 對象的狀態圖,如圖3所示。Account對象的狀態圖包含三個狀態:打開(Open),關閉(Close)和透支(Overdraft),狀態之間通過事件觸發狀態的遷移。由于篇幅限制,本文只對ATM系統進行部分擴展描述。
ATM系統過程定義的形式化代碼如下:
1) 添加一個ATM系統的初始化過程:
//新建對象
create Object instance acct of Account;
……
//寫屬性操作
acct.state=Open;
……
//形成關聯
relate acct to cardr across R1;
……
2) 往Account對象狀態圖中添加過程:
Open狀態:
//寫屬性操作
acct.state=Open;
//發送信號給cardr對象
select one cardr related by self? CardReader[R1];
generate Open to cardr;
……
利用這種方法,我們可以清楚完備地描述被建模的系統。基于生成的形式化代碼,通過一些工具我們可以將過程定義直接轉換成可執行程序的各種源代碼(如C、C++、JAVA等)。所以基于xUML研究MDA的實現非常具有實用價值。
5 總結
MDA分離業務功能分析設計與實現技術平臺之間緊密耦合的關系,其優勢在于使開發者的焦點轉移到了PIM的開發,因而可以擺脫很多技術實現細節的困擾,專注于業務的需求。可執行UML(xUML)是UML的一個子集,xUML去掉了UML中語義較弱的元素,加入了精確定義的動作語義。xUML通過執行模型可以驗證模型是否確實展現了它應有的行為。本文首先介紹xUML與MDA的重要原理,接著將xUML與動作語言OAL結合使得開發者能夠建立可執行的模型,使用這些模型最終可以為目標系統生成高質量的代碼。
參考文獻:
[1] Miller J,Mukerji J.Model Driven Arehiteeture(MDA)\" Object Management Group,Draft Specification ormsc/2001-07-01[EB/OL].(2001-07-09)http://www.omg.org/MDA.
[2] Kennedy Carter Limited.Action Semantics for the UML[EB/OL].(2001-08)http://www.kc.com/as_site/home.html.
[3] Raistrick C, Francis P, Wright J, et al. Model Driven Architecture with Executable UML[M]. Newyork:Cambridge University Press,2004.
[4] 劉建賓,李建忠,余楚迎.模型驅動體系結構及xUM規范在其語境中的探討[J].汕頭大學學報,2004,19(4):58-61.
[5] Raistrick C.MDA與可執行的UML[M].趙建華,譯.北京:機械工業出版社,2006.
[6] 朱忠旭,袁兆山,李宏芒.從xUML模型到J2EE應用系統的轉換方法研究[J].計算機技術與發展.2007(7):13-16.
[7] MeUor S J,Baleer M J.Executable UML:A Foundation for Model-Driven Architecture [M].[s.I.]:Addison Wesley,2002.
[8] Milan Ignjatovic.UML with Action Semantics-Concepts,Application and Implications[EB/OL].http://www.zuehlke.com/.