原文:
http://lzqdiy.bokee.com/5344025.html
2006年12月10日
關(guān)鍵詞:
rose
??
生成代碼
??
反向工程
?? ??????????????????????????????????????
?rose是最流行的建模工具,一是標(biāo)準(zhǔn)(歷史悠久用的人多),二是自始至終貫穿體現(xiàn)了RUP的思想(使用Rational suite),雖然實(shí)際工作中我們因?yàn)橹T多因素不能夠完全按照RUP方法來(lái)指導(dǎo)整體開(kāi)發(fā)過(guò)程,但相信多數(shù)團(tuán)隊(duì)還是圍繞在rose身邊使用了'簡(jiǎn)化版'的需求分析設(shè)計(jì),而多半使用了不怎么地道的'XP'開(kāi)發(fā):)
????? ROSE思想是復(fù)雜的,內(nèi)涵是豐富的,操作是別扭的,文檔是簡(jiǎn)單的,人性是沒(méi)有的。然而人們對(duì)它趨之若鶩的原因恐怕是我們現(xiàn)在的TEAMLEADER,SA受RUP的'毒害'頗深的原因,而這也將影響到徒弟--將來(lái)的SA們。
?????
一 通過(guò)模型生成代碼
rose幫助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>FORWARD ENGINEER FROM? ROSE? TO JAVA SOURCE?
?當(dāng)你嘗試把模型組件轉(zhuǎn)化成代碼框架時(shí)候,應(yīng)該考慮到先檢查將要生成的類有無(wú)語(yǔ)法錯(cuò)誤。
?1?打開(kāi)你要專化的目標(biāo)diagram
?2 選擇你要轉(zhuǎn)化的包或者類
?3.單擊? tools>java/j2ee>? Syntax Check 來(lái)檢查目標(biāo)代碼是否符合規(guī)范,比如命名錯(cuò)誤。
?4 察看rose log窗口(下方)察看檢驗(yàn)結(jié)果,如果有錯(cuò)誤,即errors那么生成的代碼很可能無(wú)法通
?過(guò)編譯
?5 根據(jù)需要校正這些組件或者圖
?6重復(fù) 步驟3直到檢驗(yàn)不出錯(cuò)誤,然后你就可以進(jìn)入下一步了???
?假設(shè)以上步驟已經(jīng)搞定了error
?7 選擇你要轉(zhuǎn)化的包或者類
?8單擊 Tools > Java/J2EE > Generate Code
?一般來(lái)說(shuō)如果你還沒(méi)有將一個(gè)package或者組件映射到一個(gè)rose的classpath目錄中(就是指定生
?成的東西放哪里),那么系統(tǒng)不會(huì)允許你在接下來(lái)的界面里點(diǎn)ok,那么現(xiàn)在就編輯目標(biāo)路徑
?9點(diǎn)classpath entries下的edit按鈕,再出現(xiàn)的界面右上角找new(insert)(刪除左邊那個(gè)),然后在列表里新增的行里選擇目標(biāo)路徑,你可以選擇目標(biāo)是生成一個(gè)zip,jar,還是一個(gè)目錄,我們選擇
?目錄。指定目錄,ok,那么你選擇的路徑就新建成功了,選擇這個(gè)路徑,點(diǎn)ok回到界面(層次
?好多阿,界面很丑阿)
?10現(xiàn)在你看到classpath entries里有東西了,選擇右側(cè)列表里你要轉(zhuǎn)換的包或者組件,點(diǎn)assign
?,即分配給目標(biāo)classpth,理論上你可以把選擇好的包組件或者類圖分別分配個(gè)多個(gè)classptah
?對(duì)象。點(diǎn)ok開(kāi)始生成
?11成功后就可以到指定的classpath下看代碼了,生成的代碼之間擁有如類圖所示的關(guān)系。
?
?
二 反向功能
rose幫助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>REVERSE ENGINEER FROM? JAVA SOURCE TO ROSE??????????
反向工程就是通過(guò)java代碼生成或者更新一個(gè)模型的過(guò)程。你可以用ROSE對(duì)以下文件進(jìn)行反向
??A.Java source code (.java files)
??B.Java bytecodes (.class files)
??C.zip, .cab, and .jar files
?1. Open the model you want to create or update.
?打開(kāi)一個(gè)你剛創(chuàng)建或者想更新的模型
?新建一個(gè)class diagram(如果你還不會(huì),那么這篇文章就別看了)
?2.單擊Tools > Java/J2EE > Reverse Engineer
?那么現(xiàn)在大家可以想象一下rose會(huì)怎么做,剛才是選擇了圖,創(chuàng)建目標(biāo)路徑,生成代碼,那么
?現(xiàn)在是否指定路徑讀文件生成圖呢,you can say that again!!
?在出現(xiàn)的界面上選擇一個(gè)classpath(如果已經(jīng)存在)當(dāng)然,你也可以通過(guò)edit classpath按鈕新
?建一個(gè)(新建路徑的界面剛才講過(guò)了,不再累贅),然后選擇這個(gè)classpath,更改下面的filter
?下拉列表,更改目標(biāo)文件類型(注意不僅僅三行,可以滾動(dòng)的,對(duì)rose的界面真是垃圾這一點(diǎn)
?又深有體會(huì)了),我們這里選擇.java,如果這個(gè)classptah下存在.java文件,那么就會(huì)被列出來(lái)
?。
?注意:你可以通過(guò) add添加選中的文件,也可以通過(guò)add all添加所有列出來(lái)的,更可以通過(guò)
?add recursive 遞歸添加這個(gè)路徑下所有的文件和子目錄下所有文件等等。可以看到rose并不會(huì)自動(dòng)列出甚至顯示有沒(méi)有子目錄(無(wú)人性)
?從添加好的文件里選擇你想反向的文件,點(diǎn)Reverse 開(kāi)始創(chuàng)建或者更新
?無(wú)論成功還是失敗都會(huì)警告,并有l(wèi)og。有錯(cuò)你就改到?jīng)]錯(cuò)為止。
?假設(shè)你成功了,點(diǎn)擊done結(jié)束反向,回到rose主界面。???????????
?注意:rose并不會(huì)針對(duì)你反向過(guò)來(lái)的類和組件自動(dòng)生成圖,生成的class已經(jīng)按照包關(guān)系列在你的
??????? class diagram下面,你需要把他們加到你的圖中去(靠,什么玩藝) ,你有兩種方法讓這個(gè)半自動(dòng)反向工程化上句號(hào)。
?? 1手工把class或者組件拖拉到目的圖里
?? 2在目標(biāo)圖的界面下點(diǎn)擊 Query > Add Classes 或者 Query > Add Components ,選擇視圖方式
?? ,一般是logic view,選擇要拖拉的類或者組件,>>或者all,點(diǎn)ok完成。生成的類圖即反映了代碼本身之間的關(guān)系。
???? ok.教程結(jié)束,因?yàn)闆](méi)有抓圖軟件,懶得拷屏幕,加之文字比較詳細(xì),相信擁有寫代碼能力和
???? 自學(xué)能力的諸位看官理解沒(méi)問(wèn)題。作為一個(gè)SE,SA,必須掌握的工具,ROSE還有很多功能隱
???? 藏在稀奇古怪的界面下,如果你不是一個(gè)RUP方法的頑固FANS,也沒(méi)有受到經(jīng)典學(xué)院派的'
???? 教導(dǎo)',或者干脆就是一個(gè)開(kāi)發(fā)人員,那么推薦大家還是快速的投入到together或者Poseidon的懷中吧。
自己的補(bǔ)充:
參考資料:
怎樣由rational rose類圖生成java代碼
http://topic.csdn.net/t/20030410/19/1644982.html
1.安ROSE前先安JDK,???????
? 不然,要設(shè)置一下jdk的路徑或者用ROSE找一下JDK的目錄:
? Tools-->java/J2EE-->Project Specification-->CLASSPATH-->new
2. 然后,畫圖的時(shí)候, ?
? 打開(kāi)J2EE,這個(gè)最全啦?,會(huì)自動(dòng)導(dǎo)入三個(gè)包:java、javax、org;??
? 否則,復(fù)雜的類,可能轉(zhuǎn)的不對(duì);
?
? 不過(guò),使用J2EE model需要導(dǎo)入大量的包,會(huì)有點(diǎn)慢,只是第一次練習(xí)“from??class diagram to java source”的話,打開(kāi)rose時(shí)點(diǎn)cancle不選任何model
? 就可以;
3.斜菱形表示public,鑰匙表示Protected,鎖表示private,T表示default;
4.生成代碼之前,在“open standard specification”中的“Attributes”和“Operations”中設(shè)置屬性的type,方法的返回值等;
5.可以在“關(guān)聯(lián)關(guān)系”等的箭頭中指定引用的名稱;
6.可以設(shè)置JAVADOC,???
???還能自動(dòng)產(chǎn)生MAIN,(未找到相應(yīng)項(xiàng))
? 可以對(duì)類的屬性,加READ WRITE方法,這個(gè)還是很好用的,不然,GET
? 的,SET的會(huì)寫好多,設(shè)置:
??右鍵單擊要生成代碼的類,選open ? standard ? Specification->Attributes,再右鍵單
??擊要生成setter/getter的屬性,選specification->java.....
??然后按“edit ? set” ?
? 將“propertyType”改為“simple”,就可以了;
(read/write的默認(rèn)值就已經(jīng)是read/write);
參考:
http://topic.csdn.net/t/20020624/11/825787.html
7.一個(gè)小技巧:???
???把默認(rèn)語(yǔ)言設(shè)為JAVA:?tools-option-notation-default
? 因?yàn)椋阋话悴粫?huì)對(duì)使用的語(yǔ)言換來(lái)?yè)Q去的, ?
? 這樣的話,???只要一產(chǎn)生類,就是JAVA類,???
????
? 并且,?? 右擊,有一項(xiàng)就相應(yīng)變?yōu)椤癹ava/J2EE”;
(如果默認(rèn)語(yǔ)言時(shí)C++,右擊的那項(xiàng)是“ANSI C++”)
? 雙擊的項(xiàng)也變了,?不是General的項(xiàng)了???直接是JAVA類屬性??;
?
8.我們要做的第一個(gè)步驟就是要先進(jìn)行語(yǔ)法檢查,???
? 這一步,是關(guān)鍵;
?有時(shí)需要語(yǔ)法檢查之后,“java/J2EE”中的“Genarate code”
? 這項(xiàng)才從灰色變?yōu)榭捎庙?xiàng);
????
? 然后設(shè)置好CLASSPATH的輸出路徑就可以了;
9.導(dǎo)出代碼 ?
? 在導(dǎo)出代碼的過(guò)程中,我們可以看到“OK”按鈕和兩視圖間的“Assign”按鈕都是灰色的。這時(shí)候,我們要選擇兩個(gè)部分,
一個(gè)是在視圖中左側(cè)的“CLASSPATH ? Entries”要選擇一個(gè)你要導(dǎo)出代碼的路徑,點(diǎn)擊讓它變成藍(lán)色就可以了。 ?
? 這時(shí)候,按鈕“OK”和“Assign”按鈕仍然是灰色的。 ?
? 下面我們還要確定右邊哪個(gè)包是要導(dǎo)出的,這里很明顯就是“scInfoTech”。我們把它和它的組件視圖全部選中。這時(shí)候,“OK”按鈕和“Assign”按鈕都變成可用的了。
10. ROSE產(chǎn)生的代碼,每個(gè)類,每個(gè)方法,都會(huì)打上一個(gè)ROSE號(hào), ?
? 后期可反轉(zhuǎn), ?
? 就是從代碼到類圖!???
? 若想去掉roseid:Tools-->java/J2EE-->Project Specification-->Code Generation;
11.不過(guò),就本身而言, ?
? ?
? 產(chǎn)生的代碼水平也是不敢^%#%$@%$#**^*&^^&^%#^%# ?
? ?
? 好象沒(méi)有寫的好!
?
? 不過(guò)可以修改代碼:java/J2EE-->edit code...;??
????
? 但是ROSE的反轉(zhuǎn)厲害的很, ?
? ?
? 可以轉(zhuǎn)CLASS的, ?
? 生成的圖,帶有關(guān)系, ?
? ?
? 用來(lái)分析別人的代碼, ?
? VERY爽 !!!??
?
12.把類圖、順序圖等圖片保存到word中:
???? 點(diǎn)工具欄中的“fit in window”->“copy”—>粘貼到word;
???? 這樣得到的圖片又清晰又完整又小,通常不到10k;如果圖片太小,在word中
???? 可以以200%的比例閱讀:“視圖”菜單—>“顯示比例”;
13.Rational Rose怎么導(dǎo)入java類庫(kù)?:
???? 問(wèn):我想用java代碼生成rose模型,可是總是有一些類找不到,需要導(dǎo)入jdk
???????????? 或者其他的類包,請(qǐng)問(wèn)怎么操作?
????? 答:菜單 ? tools ? -> ? Java/J2EE ? -> ? Project ? Specification ?
????????????? 在Classpaths中加入類庫(kù)路徑,比如 ?
???????????? ?D:\JBuilder6\jdk1.3.1\src.jar
14.畫好了類圖、順序圖,并加上了所有的操作,注釋,說(shuō)明等,怎么才能自動(dòng)
???? 生成設(shè)計(jì)文檔?(現(xiàn)在還不會(huì),還沒(méi)裝SODA)
參考資料:
http://topic.csdn.net/t/20021209/19/1245009.html
? 問(wèn):我在rose中畫了一個(gè)類圖,所有操作什么的都有了,也都寫了注釋。 ?
?????????? 但怎么才能自動(dòng)生成設(shè)計(jì)文檔呢?總不能把注釋一個(gè)一個(gè)的拷出來(lái)吧。??
?答:在report菜單總選擇SoDA ? Report,再選擇report ? template(比如Detail ? of ???????? all ? of ? attribute ? and ? operations ? by ? class ? by ? package)
?問(wèn):怎么沒(méi)有SoDA選項(xiàng)?是不是要先裝soda ? for ? word
?答:先裝soda,還要有word
?????????
http://www.rational.com/
?? 上有不少文檔
問(wèn):謝謝諸位的回答.我已經(jīng)裝上了, ? ? 雖然生成的文檔有點(diǎn)兒亂, ?
???????? 但可以看出這是一個(gè)功能很強(qiáng)大的工具.??
答:其實(shí)最好的辦法是根據(jù)你們文檔的要求自己定制soda的模版,定制的過(guò)程說(shuō)
???????? 起來(lái)很麻煩,但是其實(shí)并不復(fù)雜,看看soda的教學(xué)文檔,半天就可以掌握了
15.畫類圖的時(shí)候,最好把類按“包”組織;并跟java代碼實(shí)現(xiàn)時(shí)的包結(jié)構(gòu)對(duì)應(yīng);沒(méi)有包,所有的類堆積在一起將是一盤散沙。
ok!
?
??