原文: http://lzqdiy.bokee.com/5344025.html
2006年12月10日
關鍵詞
rose ?? 生成代碼 ?? 反向工程 ?? ??????????????????????????????????????

?rose是最流行的建模工具,一是標準(歷史悠久用的人多),二是自始至終貫穿體現了RUP的思想(使用Rational suite),雖然實際工作中我們因為諸多因素不能夠完全按照RUP方法來指導整體開發過程,但相信多數團隊還是圍繞在rose身邊使用了'簡化版'的需求分析設計,而多半使用了不怎么地道的'XP'開發:)
????? ROSE思想是復雜的,內涵是豐富的,操作是別扭的,文檔是簡單的,人性是沒有的。然而人們對它趨之若鶩的原因恐怕是我們現在的TEAMLEADER,SA受RUP的'毒害'頗深的原因,而這也將影響到徒弟--將來的SA們。
?????
一 通過模型生成代碼

rose幫助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>FORWARD ENGINEER FROM? ROSE? TO JAVA SOURCE?


?當你嘗試把模型組件轉化成代碼框架時候,應該考慮到先檢查將要生成的類有無語法錯誤。
?1?打開你要專化的目標diagram
?2 選擇你要轉化的包或者類
?3.單擊? tools>java/j2ee>? Syntax Check 來檢查目標代碼是否符合規范,比如命名錯誤。
?4 察看rose log窗口(下方)察看檢驗結果,如果有錯誤,即errors那么生成的代碼很可能無法通
?過編譯
?5 根據需要校正這些組件或者圖
?6重復 步驟3直到檢驗不出錯誤,然后你就可以進入下一步了???
?假設以上步驟已經搞定了error
?7 選擇你要轉化的包或者類
?8單擊 Tools > Java/J2EE > Generate Code
?一般來說如果你還沒有將一個package或者組件映射到一個rose的classpath目錄中(就是指定生
?成的東西放哪里),那么系統不會允許你在接下來的界面里點ok,那么現在就編輯目標路徑
?9點classpath entries下的edit按鈕,再出現的界面右上角找new(insert)(刪除左邊那個),然后在列表里新增的行里選擇目標路徑,你可以選擇目標是生成一個zip,jar,還是一個目錄,我們選擇
?目錄。指定目錄,ok,那么你選擇的路徑就新建成功了,選擇這個路徑,點ok回到界面(層次
?好多阿,界面很丑阿)
?10現在你看到classpath entries里有東西了,選擇右側列表里你要轉換的包或者組件,點assign
?,即分配給目標classpth,理論上你可以把選擇好的包組件或者類圖分別分配個多個classptah
?對象。點ok開始生成
?11成功后就可以到指定的classpath下看代碼了,生成的代碼之間擁有如類圖所示的關系。
?
?
二 反向功能
rose幫助位于 HELP>>CONTENTS>>ROSE JAVA>>HOW TO >>REVERSE ENGINEER FROM? JAVA SOURCE TO ROSE??????????
反向工程就是通過java代碼生成或者更新一個模型的過程。你可以用ROSE對以下文件進行反向
??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.
?打開一個你剛創建或者想更新的模型
?新建一個class diagram(如果你還不會,那么這篇文章就別看了)
?2.單擊Tools > Java/J2EE > Reverse Engineer
?那么現在大家可以想象一下rose會怎么做,剛才是選擇了圖,創建目標路徑,生成代碼,那么
?現在是否指定路徑讀文件生成圖呢,you can say that again!!
?在出現的界面上選擇一個classpath(如果已經存在)當然,你也可以通過edit classpath按鈕新
?建一個(新建路徑的界面剛才講過了,不再累贅),然后選擇這個classpath,更改下面的filter
?下拉列表,更改目標文件類型(注意不僅僅三行,可以滾動的,對rose的界面真是垃圾這一點
?又深有體會了),我們這里選擇.java,如果這個classptah下存在.java文件,那么就會被列出來
?。
?注意:你可以通過 add添加選中的文件,也可以通過add all添加所有列出來的,更可以通過
?add recursive 遞歸添加這個路徑下所有的文件和子目錄下所有文件等等。可以看到rose并不會自動列出甚至顯示有沒有子目錄(無人性)
?從添加好的文件里選擇你想反向的文件,點Reverse 開始創建或者更新
?無論成功還是失敗都會警告,并有log。有錯你就改到沒錯為止。
?假設你成功了,點擊done結束反向,回到rose主界面。???????????
?注意:rose并不會針對你反向過來的類和組件自動生成圖,生成的class已經按照包關系列在你的
??????? class diagram下面,你需要把他們加到你的圖中去(靠,什么玩藝) ,你有兩種方法讓這個半自動反向工程化上句號。
?? 1手工把class或者組件拖拉到目的圖里
?? 2在目標圖的界面下點擊 Query > Add Classes 或者 Query > Add Components ,選擇視圖方式
?? ,一般是logic view,選擇要拖拉的類或者組件,>>或者all,點ok完成。生成的類圖即反映了代碼本身之間的關系。
???? ok.教程結束,因為沒有抓圖軟件,懶得拷屏幕,加之文字比較詳細,相信擁有寫代碼能力和
???? 自學能力的諸位看官理解沒問題。作為一個SE,SA,必須掌握的工具,ROSE還有很多功能隱
???? 藏在稀奇古怪的界面下,如果你不是一個RUP方法的頑固FANS,也沒有受到經典學院派的'
???? 教導',或者干脆就是一個開發人員,那么推薦大家還是快速的投入到together或者Poseidon的懷中吧。




自己的補充:
參考資料:
怎樣由rational rose類圖生成java代碼
http://topic.csdn.net/t/20030410/19/1644982.html

1.安ROSE前先安JDK,???????
? 不然,要設置一下jdk的路徑或者用ROSE找一下JDK的目錄:
? Tools-->java/J2EE-->Project Specification-->CLASSPATH-->new

2. 然后,畫圖的時候, ?
? 打開J2EE,這個最全啦?,會自動導入三個包:java、javax、org;??
? 否則,復雜的類,可能轉的不對;
?
? 不過,使用J2EE model需要導入大量的包,會有點慢,只是第一次練習“from??class diagram to java source”的話,打開rose時點cancle不選任何model
? 就可以;
3.斜菱形表示public,鑰匙表示Protected,鎖表示private,T表示default;
4.生成代碼之前,在“open standard specification”中的“Attributes”和“Operations”中設置屬性的type,方法的返回值等;
5.可以在“關聯關系”等的箭頭中指定引用的名稱;
6.可以設置JAVADOC,???
???還能自動產生MAIN,(未找到相應項

? 可以對類的屬性,加READ WRITE方法,這個還是很好用的,不然,GET
? 的,SET的會寫好多,設置:
??右鍵單擊要生成代碼的類,選open ? standard ? Specification->Attributes,再右鍵單
??擊要生成setter/getter的屬性,選specification->java.....
??然后按“edit ? set” ?
? 將“propertyType”改為“simple”,就可以了;
(read/write的默認值就已經是read/write);

參考:
http://topic.csdn.net/t/20020624/11/825787.html

7.一個小技巧:???
???把默認語言設為JAVA:?tools-option-notation-default
? 因為,你一般不會對使用的語言換來換去的, ?
? 這樣的話,???只要一產生類,就是JAVA類,???
????
? 并且,?? 右擊,有一項就相應變為“java/J2EE”;
(如果默認語言時C++,右擊的那項是“ANSI C++”)
? 雙擊的項也變了,?不是General的項了???直接是JAVA類屬性??;
?
8.我們要做的第一個步驟就是要先進行語法檢查,???
? 這一步,是關鍵;
?有時需要語法檢查之后,“java/J2EE”中的“Genarate code”
? 這項才從灰色變為可用項;
????
? 然后設置好CLASSPATH的輸出路徑就可以了;

9.導出代碼 ?
? 在導出代碼的過程中,我們可以看到“OK”按鈕和兩視圖間的“Assign”按鈕都是灰色的。這時候,我們要選擇兩個部分
一個是在視圖中左側的“CLASSPATH ? Entries”要選擇一個你要導出代碼的路徑,點擊讓它變成藍色就可以了。 ?
? 這時候,按鈕“OK”和“Assign”按鈕仍然是灰色的。 ?
? 下面我們還要確定右邊哪個包是要導出的,這里很明顯就是“scInfoTech”。我們把它和它的組件視圖全部選中。這時候,“OK”按鈕和“Assign”按鈕都變成可用的了。

10. ROSE產生的代碼,每個類,每個方法,都會打上一個ROSE號, ?
? 后期可反轉, ?
? 就是從代碼到類圖!???
? 若想去掉roseid:Tools-->java/J2EE-->Project Specification-->Code Generation;

11.不過,就本身而言, ?
? ?
? 產生的代碼水平也是不敢^%#%$@%$#**^*&^^&^%#^%# ?
? ?
? 好象沒有寫的好!
?
? 不過可以修改代碼:java/J2EE-->edit code...;??
????
? 但是ROSE的反轉厲害的很, ?
? ?
? 可以轉CLASS的, ?
? 生成的圖,帶有關系, ?
? ?
? 用來分析別人的代碼, ?
? VERY爽 !!!??
?
12.把類圖、順序圖等圖片保存到word中:
???? 點工具欄中的“fit in window”->“copy”—>粘貼到word;
???? 這樣得到的圖片又清晰又完整又小,通常不到10k;如果圖片太小,在word中
???? 可以以200%的比例閱讀:“視圖”菜單—>“顯示比例”;

13.Rational Rose怎么導入java類庫?:
???? 問:我想用java代碼生成rose模型,可是總是有一些類找不到,需要導入jdk
???????????? 或者其他的類包,請問怎么操作?
????? 答:菜單 ? tools ? -> ? Java/J2EE ? -> ? Project ? Specification ?
????????????? 在Classpaths中加入類庫路徑,比如 ?
???????????? ?D:\JBuilder6\jdk1.3.1\src.jar

14.畫好了類圖、順序圖,并加上了所有的操作,注釋,說明等,怎么才能自動
???? 生成設計文檔?(現在還不會,還沒裝SODA
參考資料:
http://topic.csdn.net/t/20021209/19/1245009.html

? 問:我在rose中畫了一個類圖,所有操作什么的都有了,也都寫了注釋。 ?
?????????? 但怎么才能自動生成設計文檔呢?總不能把注釋一個一個的拷出來吧。??

?答:在report菜單總選擇SoDA ? Report,再選擇report ? template(比如Detail ? of ???????? all ? of ? attribute ? and ? operations ? by ? class ? by ? package)

?問:怎么沒有SoDA選項?是不是要先裝soda ? for ? word

?答:先裝soda,還要有word
?????????
http://www.rational.com/ ?? 上有不少文檔

問:謝謝諸位的回答.我已經裝上了, ? ? 雖然生成的文檔有點兒亂, ?
???????? 但可以看出這是一個功能很強大的工具.??

答:其實最好的辦法是根據你們文檔的要求自己定制soda的模版,定制的過程說
???????? 起來很麻煩,但是其實并不復雜,看看soda的教學文檔,半天就可以掌握了

15.畫類圖的時候,最好把類按“包”組織;并跟java代碼實現時的包結構對應;沒有包,所有的類堆積在一起將是一盤散沙。



ok!





?
??