在設計組件時,盡量考慮組件的通用性,使盡可能多的不同應用程序能夠使用,而對于使用組件的應用程序而言,組件是黑箱,即利用組件的應用程序開發者不必了解這些組件的具體實現。典型的組件有:鏈表、數組、字符串、按鈕和復選框。當程序員發現他在重復地寫類似的代碼,這時就隱藏著“組件”,程序員這時應花時間,挖掘出組件,即抽取這些代碼代的公共成分,并為它創建統一的、通用的接口時,組件就誕生。就這個意義來講,函數就是組件,但組件比函數更廣泛,是函數概念的擴展。例如:類可作為組件,它含了更多的東西,一個組件含多個函數(方法)。
架構是軟件的骨架結構,類似與建筑的框架。對于類似的應用程序可以選用類似的架構,這就是架構的重用。對于利用架構進行軟件設計時,架構是白箱。因此,開發者應理解架構,并使用適合的語言實現這個架構,架構既是可重用設計(代碼重寫),也是可重用代碼(連用代碼一并重用)。
軟件重用的理想狀態是:應用軟件是由通用的組件和專用的實體充實到一個通用的架構中。
軟件重用被看做是解決軟件危機的良藥,CBD模型(以組件為基礎的設計)不再強調軟件的開發,而是著眼于軟件的組裝,利用被嚴格地約束和封裝的組件,快速地搭建應用系統。在這個模型中,軟件的開發分為兩個階段:準備組件和組裝組件。而這兩個階段又是可以并行的,它們既有很強的獨立性,又有一種互動關系。對于應用程序的開發來說,應盡量考慮使用已有組件(在組件庫中尋找),如果缺某方面的組件,那么可以有兩種策略來處理:一是啟動組件開發;二是暫不開發新組件,而是先盡量完成應用的開發,以后,再對該部分進行總結、整理,看是否有公共功能可以提煉出組件供以后使用,如果有,則啟動新組件的開發。這說明組件開發的需求不是憑空想像的,實際上都是來源于實際應用開發的需要。CBD思想直接導致了一類開發工具與方法的研究,如RAD(快速應用開發)。
面向對象技術,從設計的角度進一步強化了軟件內部的重用性。例如:
1、被封裝的實體,向外提供服務公共接口功能而隱藏內部實現(這類似于組件作為黑盒被復用的情況),可以作為基本的重用單位,這些實體表現為類、類群(子系統)。
2、類的繼承性允許我們重用代碼:類可以繼承其他類的行為,這些行為的代碼不必重寫。
3、抽象類(不產生實例的類)是公共因子的高度抽象,它充分定義了類的行為(方法),但不需要完全實現,而是由子類重新定義方法(代碼實現)。這就是從設計角度重用抽象類的行為(雖然重寫了代碼,但重用了設計結果)。
4、面向對象設計中,客戶/服務器建模:一個對象需要另一個對象的服務,提出請求的對象是“客戶”,接收請求并提供服務的對象是“服務器”??蛻襞c服務器的交互(單向的)方式由一個契約所描述。服務器就是一個運行時的復用單元(它為許多對象提供服務)。
原文轉自:http://www.anti-gravitydesign.com