摘要:MDA是一種以模型為中心的新的軟件開發(fā)模式??蓤?zhí)行UML(xUML)是UML的一個(gè)擴(kuò)展,通過在UML中加入精確的可執(zhí)行的動(dòng)作語義,使得建模者可以生成可執(zhí)行的獨(dú)立于平臺(tái)的模型,并直接從該模型生成代碼。該文將xUML 與動(dòng)作語言O(shè)AL結(jié)合討論,目標(biāo)是建立可執(zhí)行的模型,使用這些模型最終可以為目標(biāo)系統(tǒng)生成高質(zhì)量的代碼,并用一個(gè)實(shí)例說明了該方法的使用。
關(guān)鍵詞:模型驅(qū)動(dòng)體系架構(gòu);可執(zhí)行UML;平臺(tái)無關(guān)模型;平臺(tái)相關(guān)模型;對(duì)象動(dòng)作語言
中圖分類號(hào):TP311.5文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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 引 言
隨著計(jì)算機(jī)及網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,需要軟件解決的問題越來越多。軟件業(yè)面臨著越來越大的壓力,軟件開發(fā)過程變得越來越復(fù)雜。為處理這些問題,2001年,對(duì)象管理組織(OMG)提出了模型驅(qū)動(dòng)體系架構(gòu)(MDA,Model Driven Architecture),將軟件系統(tǒng)建立在各種模型的基礎(chǔ)上,通過模型的變換來驅(qū)動(dòng)系統(tǒng)的開發(fā),以便設(shè)計(jì)出輕便可操作的應(yīng)用程序[1]。MDA是一種以模型為中心的新的軟件開發(fā)模式。目標(biāo)是要實(shí)現(xiàn)從UML企業(yè)模型到最終代碼的自動(dòng)生成。MDA的核心思想是抽象出與實(shí)現(xiàn)技術(shù)無關(guān)的、完整地描述業(yè)務(wù)功能的平臺(tái)無關(guān)模型(PIM),然后針對(duì)不同實(shí)現(xiàn)技術(shù)制訂相應(yīng)的映射規(guī)則,再通過這些映射規(guī)則將PIM轉(zhuǎn)換成與具體實(shí)現(xiàn)技術(shù)相對(duì)的平臺(tái)相關(guān)模型(PSM),最終將PSM轉(zhuǎn)換成可執(zhí)行的代碼[1]。
目前國內(nèi)外對(duì)MDA中模型變換的研究很多,但是大多還是處在語法層進(jìn)行的。本文將PIM表示為可執(zhí)行UML (xUML,Executable UML),并將xUML 與一門動(dòng)作語言O(shè)AL(Object Action Language)相結(jié)合以生成可執(zhí)行的獨(dú)立于平臺(tái)的模型,并直接從該模型生成代碼。
可執(zhí)行UML(xUML)是UML的一個(gè)擴(kuò)展,是UML語言家族中一門獨(dú)立的語言。實(shí)際上,xUML 是在UML中加入精確的動(dòng)作語義,從而使得建模者可以生成可執(zhí)行的系統(tǒng)規(guī)約。xUML 與一門完整的動(dòng)作語言結(jié)合就可以使得開發(fā)者建立可執(zhí)行的域模型,使用這些模型可以為目標(biāo)系統(tǒng)生成高質(zhì)量的代碼[2],這也是本文研究的目標(biāo)。
本文的其余部分是這樣安排的:第二部分闡述了xUML 的基本概念;第三部分分析了MDA中的兩種核心模型PIM和PSM。第四部分重點(diǎn)研究了基于xUML的MDA的實(shí)現(xiàn),并介紹了該方法在一個(gè)實(shí)例的應(yīng)用;第五部分得出結(jié)論。
2 xUML 的基本概念
MDA的指導(dǎo)思想就是一切都是模型,一切由模型驅(qū)動(dòng)。UML在MDA中起到極其重要的作用,是MDA的關(guān)鍵實(shí)現(xiàn)技術(shù),但UML缺乏精確的和形式化的基礎(chǔ),只是一種半形式化的語言。語義的不完整性和二義性使得UML模型不能運(yùn)行。xUML 是用基于精確動(dòng)作語義的UML動(dòng)作語言來表達(dá)的,是UML的一個(gè)子集。xUML是目前各種高級(jí)語言更高層次上的抽象,用xUML建立的系統(tǒng)模型獨(dú)立于系統(tǒng)實(shí)現(xiàn)的技術(shù),理論上運(yùn)用xUML建立的系統(tǒng)模型可在各種軟件環(huán)境下部署實(shí)現(xiàn),而不需要改變其模型本身。如今xUML已經(jīng)成功應(yīng)用于模型驅(qū)動(dòng)體系結(jié)構(gòu)多系統(tǒng)的開發(fā)[3]。因此xUML 的發(fā)展可以說是軟件發(fā)展的一種歷史趨勢(shì)。xUML的定義如圖1所示[2]。
xUML去掉了UML中語義較弱的元素,如組件圖和部署圖等,而保留了語義較強(qiáng)的元素,包括用況圖、類圖、順序圖和狀態(tài)圖等。xUML主要目標(biāo)是建立可執(zhí)行的域模型,域是由一組獨(dú)有的類組成,其中還包括類的內(nèi)部結(jié)構(gòu)(類的屬性和操作)。在xUML中,每個(gè)類最多有一個(gè)狀態(tài)圖。xUML主要是對(duì)狀態(tài)圖的深化。
動(dòng)作語義旨在向建模者提供一種在UML模型內(nèi)精確定義行為的方式,它可以描述方法的主題、狀態(tài)或狀態(tài)圖中狀態(tài)間轉(zhuǎn)移的輸出或與系統(tǒng)狀態(tài)相關(guān)聯(lián)的活動(dòng)[5]。UML標(biāo)準(zhǔn)中雖然加入了動(dòng)作語義,但卻沒定義具體的動(dòng)作語言?,F(xiàn)在已出現(xiàn)了多種為xUML設(shè)計(jì)的動(dòng)作描述語言,如ASL,OAL,SDL,SMALL等,動(dòng)作描述語言使建模者可以為xUML的處理行為提供無歧義的、精確的定義[6]。
3 MDA的兩種核心模型
MDA中,模型主要分為兩種:平臺(tái)無關(guān)模型(PIM)和平臺(tái)相關(guān)模型(PSM)。在MDA 中,PIM 是基礎(chǔ)和核心?;贛DA 的開發(fā)項(xiàng)目都是從創(chuàng)建一個(gè)PIM 開始。PIM是一個(gè)獨(dú)立于任何技術(shù)實(shí)現(xiàn)的高度抽象模型,它抓住系統(tǒng)的本質(zhì)特征,清楚地描述了系統(tǒng)作什么。PIM 可能包括描述如何實(shí)現(xiàn)需求的一般的函數(shù)、場景和類。PIM是一個(gè)系統(tǒng)的形式化規(guī)范,可以利用UML或其它合適的標(biāo)記來表示,與具體的技術(shù)細(xì)節(jié)無關(guān)。PIM只用來描述業(yè)務(wù)的功能和行為,它可在相當(dāng)長的時(shí)間內(nèi)保持其價(jià)值,只有在業(yè)務(wù)需求要求其改變時(shí)才需要改變[4]。在本文,為了得到可執(zhí)行的模型,我們將PIM表示為xUML。相對(duì)于PIM的平臺(tái)無關(guān)性,PSM是平臺(tái)相關(guān)的。PSM詳細(xì)說明系統(tǒng)是如何在一個(gè)確定的平臺(tái)實(shí)現(xiàn)的。PSM包含了所有在PIM 中表示的功能,并且還添加了針對(duì)實(shí)現(xiàn)平臺(tái)的設(shè)計(jì)思想。
從PIM 轉(zhuǎn)換到PSM,設(shè)計(jì)人員需要對(duì)不同實(shí)現(xiàn)技術(shù)制訂多個(gè)映射規(guī)則,根據(jù)這些映射規(guī)則將PIM轉(zhuǎn)換成與特定實(shí)現(xiàn)技術(shù)及環(huán)境相關(guān)的PSM;最后將經(jīng)過PSM轉(zhuǎn)換成代碼。因?yàn)镻SM是通過映射從PIM派生出來的,因此人們不必維護(hù)或修改PSM,而是從PIM自動(dòng)生成PSM。如果業(yè)務(wù)需求有變化,這些變化將在PIM中反映出來并在PIM中測試,然后我們?cè)俅芜\(yùn)用映射規(guī)則來生成新的PSM[5]。在本文中,PIM到PSM的轉(zhuǎn)換將不再是研究的重點(diǎn)。我們將PIM表示為xUML,并將xUML與OAL結(jié)合以生成可執(zhí)行的獨(dú)立于平臺(tái)的模型,并直接從該模型生成代碼。
4 基于xUML的MDA實(shí)現(xiàn)
xUML是UML的一個(gè)子集,它定義了系統(tǒng)最小化的模型。Kennedy[2]將xUML與完整的動(dòng)作規(guī)約語言(ASL,Action Specification Language)一并使用。通過ASL,xUML可以在平臺(tái)無關(guān)的UML中完全地描述一個(gè)系統(tǒng)的全部行為,并實(shí)現(xiàn)模型的運(yùn)行。
我們的研究方法是將xUML與對(duì)象動(dòng)作語言O(shè)AL[8]結(jié)合使用,用OAL充分詳細(xì)地描述模型的行為,以便建立起可執(zhí)行的模型,并且利用這些模型來生成高質(zhì)量的代碼。OAL定義的部分動(dòng)作語法規(guī)則見表1。主要包括有對(duì)象和屬性動(dòng)作,關(guān)聯(lián)動(dòng)作,選擇和發(fā)送信號(hào)動(dòng)作。
運(yùn)用xUML對(duì)一個(gè)系統(tǒng)進(jìn)行建模時(shí),主要包括以下三個(gè)模型:概念類模型、類的狀態(tài)模型和行為動(dòng)作模型[7]。這三個(gè)模型組成了對(duì)一個(gè)系統(tǒng)的完整的可執(zhí)行模型的定義描述。類模型主要描述了系統(tǒng)中類與類之間的靜態(tài)關(guān)系,包括類的屬性與操作的定義。類的狀態(tài)模型主要由狀態(tài)圖體現(xiàn)。xUML主要是對(duì)狀態(tài)圖的深化,通過向狀態(tài)圖中添加過程定義,使整個(gè)UML模型是計(jì)算完備的。
本文以銀行的ATM系統(tǒng)為例來說明如何將xUML與OAL結(jié)合使用建立起可執(zhí)行的模型。圖2顯示了ATM系統(tǒng)的概要類模型,包括CardReader,ATMScreen,Account 和CashDispenser四個(gè)類以及類之間的關(guān)系。我們重點(diǎn)研究Account 對(duì)象的狀態(tài)圖,如圖3所示。Account對(duì)象的狀態(tài)圖包含三個(gè)狀態(tài):打開(Open),關(guān)閉(Close)和透支(Overdraft),狀態(tài)之間通過事件觸發(fā)狀態(tài)的遷移。由于篇幅限制,本文只對(duì)ATM系統(tǒng)進(jìn)行部分?jǐn)U展描述。
ATM系統(tǒng)過程定義的形式化代碼如下:
1) 添加一個(gè)ATM系統(tǒng)的初始化過程:
//新建對(duì)象
create Object instance acct of Account;
……
//寫屬性操作
acct.state=Open;
……
//形成關(guān)聯(lián)
relate acct to cardr across R1;
……
2) 往Account對(duì)象狀態(tài)圖中添加過程:
Open狀態(tài):
//寫屬性操作
acct.state=Open;
//發(fā)送信號(hào)給cardr對(duì)象
select one cardr related by self? CardReader[R1];
generate Open to cardr;
……
利用這種方法,我們可以清楚完備地描述被建模的系統(tǒng)?;谏傻男问交a,通過一些工具我們可以將過程定義直接轉(zhuǎn)換成可執(zhí)行程序的各種源代碼(如C、C++、JAVA等)。所以基于xUML研究MDA的實(shí)現(xiàn)非常具有實(shí)用價(jià)值。
5 總結(jié)
MDA分離業(yè)務(wù)功能分析設(shè)計(jì)與實(shí)現(xiàn)技術(shù)平臺(tái)之間緊密耦合的關(guān)系,其優(yōu)勢(shì)在于使開發(fā)者的焦點(diǎn)轉(zhuǎn)移到了PIM的開發(fā),因而可以擺脫很多技術(shù)實(shí)現(xiàn)細(xì)節(jié)的困擾,專注于業(yè)務(wù)的需求??蓤?zhí)行UML(xUML)是UML的一個(gè)子集,xUML去掉了UML中語義較弱的元素,加入了精確定義的動(dòng)作語義。xUML通過執(zhí)行模型可以驗(yàn)證模型是否確實(shí)展現(xiàn)了它應(yīng)有的行為。本文首先介紹xUML與MDA的重要原理,接著將xUML與動(dòng)作語言O(shè)AL結(jié)合使得開發(fā)者能夠建立可執(zhí)行的模型,使用這些模型最終可以為目標(biāo)系統(tǒng)生成高質(zhì)量的代碼。
參考文獻(xiàn):
[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] 劉建賓,李建忠,余楚迎.模型驅(qū)動(dòng)體系結(jié)構(gòu)及xUM規(guī)范在其語境中的探討[J].汕頭大學(xué)學(xué)報(bào),2004,19(4):58-61.
[5] Raistrick C.MDA與可執(zhí)行的UML[M].趙建華,譯.北京:機(jī)械工業(yè)出版社,2006.
[6] 朱忠旭,袁兆山,李宏芒.從xUML模型到J2EE應(yīng)用系統(tǒng)的轉(zhuǎn)換方法研究[J].計(jì)算機(jī)技術(shù)與發(fā)展.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/.