程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JBuilder2005實現重構之對重構的支持

JBuilder2005實現重構之對重構的支持

編輯:關於JAVA

Martin Flower在寫《重構》時曾經感歎地說,如果有一個自動化的重構工具出現就好了,而且也預言了重構的發展方向是工具自動化重構。JBuilder正好迎合了這聲呼喊,到目前為此,可以很公允地說,還沒有一種工具在重構的表現上可望其項背。

1、提供了哪些重構的功能

JBuilderX(上一版本)就已經有了重構的功能,JBuilder 2005對代碼重構投入了更多的熱情,賦予了更多靈活易用的功能。在JBuilder 2005中,重構已經單獨形成一個獨立的Refactor主菜單。簡要的講JBuilder 2005為重構提供了以下的功能:

· 發現引用,查看重構的影響

如果你需要對一個方法進行重新命名,所有引用到這個方法的地方都要相應更改,也許你希望在重構前查看一下這種影響涉及到的地方。對於一個擁有成千上百個類的大系統,如果徒手去做這項工作,其艱辛程度令人望而生畏,JBuilder可以按語義關聯找出所有引用,這樣,你就可以揮灑自如,游刃有余地完成這項工作了。

· 重命名

我們對代碼中包、類、方法、值域等改名是有建設意義的,通過改名可以清晰化代碼,增強可讀性。但在程序的環境裡存在許多引用,如果冒然改名將使許多引用發生錯誤。JBuilder像一個有力的協調者,在對元素進行更名的同時更改這些調用,使改名得到同步。

· 提煉式重構

JBuilder提供了輕松的方法,將類中的方法抽取到一個新類中,將大方法中的一段代碼抽取為一個獨立的小方法,也提供了方便的操作,將一個重復的表達式提取成一個臨時的變量。

· 搬遷重構

有個經典的游戲叫作"推箱子",它的目標是將散落在倉庫中的貨物搬遷到一起。將方法或值域在類的承繼體系中上推下移,在JBuilder中就象玩"推箱子"游戲一個簡單。

· 通過重構將代碼提升到JDK 5.0

寶劍出銷,猛虎出籠,被命名為Tiger的JDK5.0給Java開發者帶來了諸多的歡喜,但也帶來了諸多的苦惱:如何將低版本的代碼無縫升級為JDK 5.0的代碼風格,如更有效的循環語句、自動裝/拆箱、非泛型轉泛型等。JBuilder提供了簡單的操作,你定會感受到這種無縫升級的快樂。

· 分布式重構

所謂分布式重構是這樣的一種情形:A團隊開發一個公用模塊打成JAR包分發給其他B、C等團隊使用,當A對公用模塊進行重構後,將重構信息附在JAR包中一起重新分發,B、C等團隊直接通過JBuilder將這些重構信息應用於他們的代碼。

分布式重構無疑是一項閃亮的功能,使多團隊的協作變得更加自由,沒有分布式重構,源頭的更改將變得束手束腳,有了分布式重構所有的樊牢都自行拆除。

· 其它歸為雜項的重構

JBuilder還提供了許多有用的代碼重構功能,如優化import語句,自動添加異常捕捉的代碼塊,對部署描述文件進行重構,EJB重構,代理方法等不一而足。

當然有一些重構無法通過工具完成,如算法的優化設計,數據庫的優化設計等,我很慶幸工具的這種限制,不然我會失業的:)。

2、重構對話框

打開Java文件,將光標移至需要重構的語義代碼處,調出重構對話框,如下圖是對包名進行重構的對話框:

圖 1 代碼重構對話框

一般的重碼功能項都有一個對應的對話框,勾選View references before refactoring項表示點擊OK按鈕後,先預覽重構所涉及代碼,重構預覽窗口如下圖所示:

圖 2 重構預覽窗口

如果重構對話框的View references before refactoring選項沒有勾選,JBuilder直接完成重構,不需用戶再點擊按鈕。

在預覽時,編輯器中的包名依然為未重構前的包名,信息窗格列出了重構影響到的地方,信息窗格第一行的"Rename Package myrefactor to myrefactor_1"說明重構將包名從myrefactor更名為myrefactor_1。點擊信息窗格的按鈕應用重構。如果想取消重構,點擊信息窗格底部的按鈕關閉信息窗格,此時JBuilder會彈出對話框,提示用戶還沒有應用重構,點擊確認後退出即可。如果點擊按鈕進行了重構,可以通過按鈕撤消重構。在重構後最好點擊按鈕對重構影響到的文件重新編譯以確保Class文件和Java文件同步。

3、重構一般操作步驟

在JBuilder中重構的一般按以下步驟進行:

1.重編譯工程以保證Java文件和Class文件同步。

2.將光標置於需要重構的語義代碼(如包名、類名、方法、值域、局域變量)中,如果需要進行諸如抽取方法的重構,還需要選擇一塊代碼。

3.調出重構對話框。JBuilder提供了四種調用重構功能的方法:

· 通過Refactor主菜單下的菜單項。

· 通過Ctrl+Shift+R快捷鍵調出重構浮動菜單。

· 在編輯器中右擊,在彈出的菜單中選擇重構菜單項。

· 通過UML圖的右鍵菜單進行重構。

此外JBuilder還為一些常用的重構功能提供了快捷鍵,在下表中說明:

表 1 重構功能項快捷鍵

快捷鍵 重構功能 Ctrl+Shift+E 提煉方法 Ctrl+Shift+V 引入變量 Ctrl+Shift+C 自動添加異常捕捉代碼

注意:

本文後續內容除特殊情況外,都通過Ctrl+Shift+R快捷鍵調出重構菜單,再通過浮動菜單項調出重構對話框。為保持行文的簡潔性,像Ctrl+Shift+R->調出浮動重構菜單->在浮動菜單中選擇Rename Method "xxx"...菜單項,調出方法重命名對話框,我們將直接描述為:Ctrl+Shift+R->Rename Method調出方法重命名對話框。

4.通過信息窗格的報告重構信息,預覽重構的影響。

5.點擊按鈕確認重構。

6.點擊編譯重構影響的Java文件以保持和Class文件同步。

JBuilder將每次重構看成一個事務性的操作,假設重命名一個類,這將涉及到類名稱的更改、構造函數的更改、類文件名的更改、調用者引用的更改,如果某一步不成功,如文件名更改時發生IO讀寫問題,則所有的更改都不會發生。這種事務性的操作使得重構的安全性和完整性得到了很好的保障。

由於JBuilder是通過類語義關聯查找引用關系的,所以為了保證重構的正確,在重構前需要保證Class文件和Java文件的一致,如果在上次編譯後對源代碼進行了更改,在重構前必須編譯工程以保證兩者的一致性,這樣才不會有引用同步更改的漏網之魚。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved