胡文娟
【摘要】 計算機軟件開發(fā)的代碼重用是一個終極目標。本論文以JAVA軟件開發(fā)為例,說明了組成支持代碼重用的一種方法的三個步驟。
【關鍵詞】 JAVA 代碼重用
一、引言
計算機軟件開發(fā)的代碼重用是一個終極目標,然而,重用可能難以實現(xiàn),因為傳統(tǒng)面向對象編程方法在可重用性方面存在一些不足。本論文以JAVA軟件開發(fā)為例,說明了組成支持代碼重用的一種方法的三個步驟。
二、JAVA軟件代碼重用的三個步驟
第一步
將功能移出類實例方法:由于類繼承機制缺乏精確性,因此對于代碼重用來說它并不是一種最理想的機制。執(zhí)行單一概念性任務的任何方法都應該是獨立的,并應將其作為要重用的首選方法。
要實現(xiàn)這一點,必須返回到過程式編程,將代碼移出類實例方法并將其移入全局可見的過程中。
在 Java 中,方法不能脫離類而存在。但是,可以使方法成為單個類的、公共可見的靜態(tài)方法。如可以采用類似下面的一個類:
class Polygon {..
public int getPerimeter() {...}
public boolean isConvex() {...}
public boolean containsPoint(Point p) {...}
.. }
并將其更改為類似以下的形式:
class Polygon {..
public int getPerimeter() {return pPolygon
computePerimeter(this);}
public boolean isConvex() {return pPolygon.isConvex(this);}
public boolean containsPoint(Point p)
{return pPolygon.containsPoint(this, p);}
..}
以上事例中所實現(xiàn)效果就是,客戶端代碼不再非要通過繼承 Polygon 來重用其功能?,F(xiàn)在這一功能在 pPolygon 類中是以過程為單位提供的。
第二步
將非基本數(shù)據(jù)類型的輸入?yún)?shù)類型轉換為接口類型:通過接口參數(shù)類型而非通過類繼承利用多態(tài)性,這是在面向對象編程方法中實現(xiàn)可重用性的真正基礎??芍赜眯允峭ㄟ^編寫接口,而不是通過編寫類來實現(xiàn)的。
將以上的論述應用到第一步的結果,一旦某個功能塊可作為一個全局可見的獨立過程,就可以通過將它的每個類級輸入?yún)?shù)類型轉換為接口類型,從而進一步提高它的可重用性。
例如,假定有一個全局可見的靜態(tài)方法:
static public boolean contains(Rectangle rect, int x, int y) {...}
該方法旨在判斷給定的矩形是否包含給定的位置。此處應該將 rect 參數(shù)的類型從類類型 Rectangle 更改為接口類型,如下所示:
static public boolean contains(Rectangular rect, int x, int y){...}
Rectangular could be the following interface:
public interface Rectangular {
Rectangle getBounds();}
現(xiàn)在,可描述為 Rectangular 的類的對象都可作為 rect 的參數(shù)傳遞給 pRectangular.contains()。通過放寬對可傳遞給方法的參數(shù)的約束來提高方法的可重用性。
第三步
選擇耦合性較小的輸入?yún)?shù)接口類型:在執(zhí)行第二步時,應該選擇能充分描述過程對參數(shù)的要求且累贅最少的任何接口來替代給定的類類型。參數(shù)對象要實現(xiàn)的接口越小,任一特定類能實現(xiàn)該接口的機會就越大。如果有如下這樣一個方法:
static public boolean areOverlapping(Window window1, Window window2) {...}
該方法旨在判斷兩個(假定為 rectangular)窗口是否重疊,如果該方法僅要求它的兩個參數(shù)提供它們各自的 rectangular坐標,則簡化這兩個參數(shù)的類型以反映這一事實:
static public boolean areOverlapping(Rectangular rect1, Rectangular rect2) {...}
以上代碼假定前面的 Window 類型對象也能實現(xiàn)Rectangular?,F(xiàn)在可以重用任何 rectangular 對象的第一個方法中所包含的功能。
三、小結
以上三步旨在改進用更傳統(tǒng)的面向對象方法編寫的現(xiàn)有代碼。將這三個步驟與面向對象編程結合使用即可構建一種新的方法,可用這種新方法編寫以后的JAVA代碼,這樣編寫代碼將提高方法的可重用性和內聚性,同時也會減少方法的相互耦合及復雜性。