UML模型到代碼的轉(zhuǎn)換_第1頁
UML模型到代碼的轉(zhuǎn)換_第2頁
UML模型到代碼的轉(zhuǎn)換_第3頁
UML模型到代碼的轉(zhuǎn)換_第4頁
UML模型到代碼的轉(zhuǎn)換_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、UML模型到代碼的轉(zhuǎn)換Sean2003/09/04概述UML在軟件系統(tǒng)中的建模能力和在業(yè)界的認(rèn)可程度是不用懷疑的。我們可以看到,越 來越多的軟件項(xiàng)目采用UML作為項(xiàng)目的分析設(shè)計(jì)的表述手段。然而,UML模型作為系統(tǒng) 的模型描述最終是要變?yōu)楦鞣N可以編譯運(yùn)行的代碼的。從UML模型到代碼的過程,在過去 是通過人工來進(jìn)行翻譯的。而現(xiàn)在,這個(gè)模型到代碼的轉(zhuǎn)換過程都是通過軟件工具自動(dòng)化的 完成的。因?yàn)樵赨ML的設(shè)計(jì)之初,就考慮到了模型到代碼轉(zhuǎn)化的自動(dòng)化的問題,所以UML 模型本身就是適合自動(dòng)化過程的。如今,已經(jīng)有很多UML工具實(shí)現(xiàn)了 UML模型到代碼的 轉(zhuǎn)化過程,如Rose,Together,Argo等等。

2、這里給出了一個(gè)通用的模型到代碼的轉(zhuǎn)換方法, 可以實(shí)現(xiàn)對UML模型到代碼轉(zhuǎn)化的定制??啥ㄖ频囊饬x在于,可以為UML模型提供到不 同編程語言的代碼轉(zhuǎn)換引擎。通常工具提供的有c/c+, Java等常用語言的轉(zhuǎn)換模塊。這里 以實(shí)時(shí)嵌入式系統(tǒng)應(yīng)用的SystemC為例,來定制自己的UML到代碼的轉(zhuǎn)換工具。當(dāng)然可以 利用這個(gè)轉(zhuǎn)換引擎,實(shí)現(xiàn)UML模型到各種語言的轉(zhuǎn)換。定制化的UML模型到代碼的轉(zhuǎn)換工具的意義,不但是可以生成自己的編程語言源碼, 而且這個(gè)轉(zhuǎn)換模塊還可以作為UML模型到其它模型描述形式的轉(zhuǎn)換橋梁,比如UML模型 的報(bào)表,模型審計(jì)等。如下圖。圖表1模型轉(zhuǎn)換引擎所處的位置轉(zhuǎn)換實(shí)現(xiàn)2.1工具的選擇作為U

3、ML模型的描述標(biāo)準(zhǔn)有OMG標(biāo)準(zhǔn)化組織的XMI。各種UML建模開發(fā)工具也都 支持從UML內(nèi)部元模型到XMI的轉(zhuǎn)換工作。比如Rose通過插件的形式支持XMI格式的 輸出,Together也支持XMI格式的數(shù)據(jù),Argo本身就是以XMI的格式為模型的保存格式的。XMI是一種XML的描述形式,雖然XML形式的表述在JDOM等XML解析器的支持 下已經(jīng)提供了方便的可編程性,但是由于JDOM等XML解析器只是通用的XML處理軟件 包,對于XMI的處理是有一定的差距的,在編程上比較麻煩。為此俄國人做了一個(gè)XMI 的java版本的處理軟件包,為UML的模型處理提供了方便。在sourceforge上也可以看到

4、基于這個(gè)開發(fā)包的XMI生成代碼的開源項(xiàng)目。利用XMI是一個(gè)好的未來方向,但是現(xiàn)有的階段各個(gè)UML開發(fā)工具對XMI的格式顯 現(xiàn)各有不同,比如togeher導(dǎo)出的XMI文檔到Rose中以后模型描述會(huì)有所不同。這樣就阻 礙了實(shí)用性。當(dāng)然隨著XMI的發(fā)展和各個(gè)工具廠商的支持,從XMI來處理模型的方式是一 個(gè)完美的解決。如果可以作到XMI的標(biāo)準(zhǔn)化,那么代碼轉(zhuǎn)換引擎就可以真正做到與UML 繪制工具的無關(guān)性。先有階段選擇Together作為UML的繪制工具,通過Together的開放API來操作Together 中的UML模型,最為模型轉(zhuǎn)換的數(shù)據(jù)元。由于Together的API是java語言的接口,所以轉(zhuǎn)

5、換引擎選用Java作為開發(fā)語言,這樣可以更好的與Together實(shí)現(xiàn)無縫的集成。模型到代碼的轉(zhuǎn)換完全可以通過手工編碼的方式來完成這個(gè)轉(zhuǎn)換的工作。為了提高轉(zhuǎn)換 模塊的靈活性和通用性。有幾種技術(shù)方案可以選擇。一個(gè)是jsp技術(shù),一個(gè)是模板技術(shù)。這 兩中方式都是動(dòng)態(tài)文本文件的產(chǎn)生技術(shù),他們各有個(gè)的優(yōu)勢。從方便性上來說更傾向模板的 方式。因?yàn)閖sp要有jsp/servlet的執(zhí)行容器才可以工作。這里選擇Apache的Velocity模板引 擎。2.2模塊實(shí)現(xiàn)2.2.1 UML模型的獲得Together為我們提供了開放API,可以用來操作整個(gè)Together的開發(fā)環(huán)境包括其中的模 型。以下是開放API的開

6、發(fā)包:com.togethersoft.openapi.ide 負(fù)責(zé)處理與Together開發(fā)環(huán)境有觀的40com.togethersoft.openapi.rwi 負(fù)責(zé)處理與UML 模型有關(guān)的4?/com.togethersoft.openapi.sci負(fù)責(zé)處理與代碼編輯器有關(guān)袍0通過正三方面的API開發(fā)包,可以完成對Together的全面控制,當(dāng)然包括模型。Together 自己也是通過相同的模塊插件方式來實(shí)現(xiàn)功能擴(kuò)張的。下面是代碼實(shí)現(xiàn)。for (int- i己已已ct.edF.Tj iE letn已ntm zl :scpr i nt Prop 已 it 七 i 已;s i: n e x

7、t M 已:mb er);):Rwfhjoae rwiJMocte = iNode) rwiE 1 已m已nt;Rw i M p itilj er Eli i.uner at i on rn 已 irfci era = rwi N oitilj ers i: :i ;wh i le i: ineirilziers . has MoreE 1 erne nt s () :iRwiMeirilzier nextMetrfcier = rnPiriljers . nextRwiMPtrfciFr (j ; if (RwiShap已 Type.OPERATION.equa1s(n已 xtMerrib已

8、 r.gehe Module sc Module = ne w he Module i, ,i ;IL已. m 匚 du JL pIIeuti已 = r tj i E1 Fine nt.準(zhǔn)備模檳用的對象判斷類型匚飛禪模型節(jié)點(diǎn)(如:類圖)成員:1314IS16171819ZO21ZZ23Z4252627ZSZ930313Z3334353637383940414Z4344454547484950SI5Z535455565758596061方法成員嗎?Sc Met ho d sc Met ho ci = ne w Sc Met hod ();s c Met hod. sc Me t liocil-L

9、itriP = ne x t.MeirilziPr . ge t P ro pert, y i: Rw iPro petty. N AME :i ;scM已七h(yuǎn)od. scR已turiil-Iiittie = nextM已比iber . g已tPropert.y (RwiPropert.y. RETUF:N_TYPE);if i: nul 1 = s c Me t ho cl. a c Re t ur nl-I siu 已 :iscMetliod. isC nstructer = true;已Im已 3CHethod lscon3tructer = fal3e.String trnpParet

10、is = next-Meirfcier . get-Propert-y (RwiPropert-y. PARAMETERS_TEXT);Str ingTokeni ZFtr pin = ne w S t. r i ngTo ke n i z e r (tinp P ar aits fWil i 已 i: pin. has Mo i:已 丁口 K已 ns () :iString str Pin = pin. ne x t To ke n ();Stu iiigTokeni zeu it = new Str ingTokeni zer (strPin.r rr: FP);ScPar:aiiPt.F

11、racPar:aiiPt.Fr = iiew ScPar;itnet.Fr ();scPar;5Ltn 已七已 r . varType = (String) it. n 已 xtTcuK 已 ni:i;5cPar;5Ltn 已 t.已 r . var i ;sij 1 已 = (String) it. next-Tok 已 n i:);i: s c Me t ho cl. a c P ar ;3in 已 ters) . add i: a c Par;siriFt. er);i: s c Mo du le . ac Me t hods :i . add i: s c Me t.hod :i ;e

12、lse if (RTiTiShap已Type:. ATTRIBUTE . equals i:rt已xtMeirto已r . get.Prop已仁匚? i:RwiFi:口口已仁匚?. SHAPE_TY 仁J判斷是屈性成員嗎?二ScAttribute scAttribute = new ScAttribute(scAt-tr ibute . scAt-trN;atrie = nextMeirfcier . ge tPr per ty i: RwiPr per ty. NAME); s c At. t r ito ut e . acAt.trTypF = ne x tMetrilziFr . ge

13、t Pro pert, y i: P.w iPro p e r t y. TYP E :i ; (scMoclule . scAttr ibutes) . add (scAtt.r ibut已);st.art.Velocit.y i:scMoclule);匚福S總的對象伎遞TVelocity引擎二圖表2獲得UML模型代碼樣例2.2.2 SystemC模板編寫詳細(xì)的Velocity可以參考Velocity的開發(fā)手冊。Velocity為動(dòng)態(tài)生成文本文件提供了一 個(gè)工作引擎。在Velocity模板中可以訪問傳入模板的java對象。這個(gè)轉(zhuǎn)換模塊就是接受模型 對象scModle把模型數(shù)據(jù)傳遞給Veloc

14、ity,再通過Velocity引擎把模型展開為SystemC代碼。 下面是SystemC的模板代碼實(shí)例。t inc lude ,v syst emc.template SC MODULE ( SscModule. sre+ScMLiduleNiiJTLe C)匚迭代模塊中的方L:*部模塊名稱#f oreach( $method m $scModule. get ScMethods (.1 .)tif ( $method, isConst ruct er ()$metl-LLid. ge+ScMethLnitLiJTLe () ( #f oreach( $par:im in $met lio d

15、. g et S cP ar:iHLet e r s () ) Spar:, get VarTj.T 0 $SC_THFLEAD ( process ) ; | 祠造方法1/add your code here 、/$methrid. getS cMet hu idlI:ajrie () (/add 3our code here I 析構(gòu)方法 |void process ()./add 3rour code here#else$methi:id. get ScReturriN:ajTie () Smethod, get ScMethoidNiaiTLe () ( #f oreach( $par

16、:ajri in $method. gei: ScFarajR巳t 巳rm/add Yuur code here它方法)fend#end;圖表3 SystemC模板2.2.3集成利用Together的開放API把SystemC代碼轉(zhuǎn)換模塊集成到Together的開發(fā)環(huán)境。成為 Together中的一個(gè)服務(wù)插件。圖表4把轉(zhuǎn)換模塊集成到Together環(huán)境2.2.4轉(zhuǎn)換模塊模型轉(zhuǎn)換模塊模型如下圖。Uml2SysC是轉(zhuǎn)換引擎工作類,負(fù)責(zé)提取模型,收集模型數(shù)據(jù), 生成ScModule對象表現(xiàn)的模型數(shù)據(jù),在把ScModule對象傳遞給Velocity模板引擎。IdeScripUml2SysCScModu

17、leScMethod+isConstructer:booleanfilePath:String-startVelocityvoid-printMsg:void+autorun:void-createTheMenu:oid-openFileInEditor:oid+run:void-printPropertiesDetail:void-printProperties:void+ScModule+toString:StringscModuleName:String scAttributes:ArrayList scMethods:Array_istScAttributescAttrTy)e:String+toString:StringscAttrName:String+toString:Stringconstructer:boolean scMethodName:String scReturnName:String scParameters:Array.istScParameter+toString:StringvarTy)e:Stringvariable:String圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論