軟件重用——類構件

11.3.2    類構件

    利用面向對象技術,可以更方便更有效地實現軟件重用。面向對象技術中的“類”,是比較理想的可重用軟構件,不妨稱之爲類構件。類構件有3種重用方式,分別是實例重用、繼承重用和多態重用。下面進一步講述與類構件有關的內容。

1.可重用軟構件應具備的特點

    爲使軟構件也像硬件集成電路那樣,能在構造各種各樣的軟件系統時方便地重複使用,就必須使它們滿足下列要求:

(1)模塊獨立性強,具有單一完整的功能,且經過反覆測試被確認是正確的。它應該是一個不受或很少受外界干擾的封裝體,其內部實現在外面是不可見的。

(2)具有高度可塑性。軟構件的應用環境比集成電路更廣、更復雜。顯然,要求一個款構件能滿足任何一個系統的設計需求是不現實的,因此,可重用的軟構件必須具有高度可裁剪性,也就是說,必須提供爲適應特定需求而擴充或修改已有構件的機制,而且所提供的機制必須使用起來非常簡單方便。

(3)接口清晰、簡明、可靠。軟構件應該提供清斷、簡明、可靠的對外接口,而且還應有詳盡的文檔說明,以方便用戶使用。

    從本書第9章講述的面向對象基本概念可以知道,精心設計的“類”基本上能滿足上述要求,可以認爲它是可重用軟構件的雛形

2.類構件的重用方式

(1)實例重用

    由於類的封裝性,使用者無須瞭解實現細節就可以使用適當的構造函數,按照需要創建類的實例,然後向所創建的實例發送適當的消息,啓動相應的服務,完成需要完成的工作,這是最基本的重用方式。此外,還可以用幾個簡單的對象作爲類的成員創建出一個更復雜的類,這是實例重用的另一種形式。

    雖然實例重用是最基本的重用方式,但是,設計出一個理想的類構件並不是一件容易的事情。例如,決定一個類對外提供多少服務就是一件相當困難的事,提供的服務過多會增加接口複雜度,也會使類構件變得難於理解;提供的服務過少,則會因爲過分一般化失去重用價值。每個類構件的合理服務數都與具體應用環境密切相關,因此找到一個合理的折衷值是相當困難的

(2)繼承重用

    面向對象方法特有的繼承性提供了一種對已有的類構件進行裁剪的機制,當已有的類構件不能通過實例重用完全滿足當前系統需求時,繼承重用提供了一種安全地修改已有類構件,以便在當前系統中重用的手段。

    爲提高承重用的效果,關鍵是設計一個合理的、具有一定深度的類構件繼承層次結構。這樣做有下述兩個好處:

    *每個子類在繼承父類的屬性和服務的基礎上,只加入少量新屬性和新服務,這不僅降低了每個類構件的接口複雜度,表現出一個清晰的進化過程,提高了每個子類的可理解性,面且爲軟件開發人員提供了更多可重用的類構件。因此,在軟件開發過程中,應該時刻注意提取這種潛在的可重用構件,必要時應在領域專家幫助下,建立符合領域知識的繼承層次。

    *爲多態重用奠定良好基礎

(3)多態重用

    利用多態性不僅可以使對象的對外接口更加一般化(基類與派生類的許多對外接口是相同的),從而降低了消息連接的複雜程度,而且還提供了一種簡便可靠的軟構件組合機制,系統運行時,根據接收消息的對象類型,由多態性機制啓動正確的方法,去響應一個一般化的清息,從而簡化了消息界面和軟構件連接過程。

    爲充分實現多態重用,在設計類構件時,應該把注意力集中在下列一些可能影響重用性的操作上。

    *與表示方法有關的操作,例如,不同實例的比較、顯示、擦除等。

    *與數據結構、數據大小等有關的操作。

    *與外部設備有關的操作,例如,設備控制

    *實現算法在將來可能會改進(或改變)的核心操作。

    如果不預先採取適當措施,上述這些操作會妨礙類構件的重用。因此,必須把它們從類的操作中分離出來,作爲“適配接口”,例如,假設類C具有操作M1M2,…,MN和作A1,A2,…,Ak,其中Aj,(1≤j≤k)是上面列出的可能影響類C重用的幾類操作,Mi(1≤i≤n)是其他操作,如果Mi通過調用適配接口Aj而實現,則實際上M被A參數化了。在不同應用環境下,用戶只需在派生定義Aj(1≤j≤k)就可以重用類C。

    還可以把適配接口再進一步細分爲轉換接口和擴充接口,轉換接口,是爲了克服與表示方法、數據結構或硬件特點相關的操作給重用帶來的困難面設計的,這類接口是每個類構件在重用時都必須重新定義的服務的集合,當使用C++語言編程時,應該在根類(或適當的基類)中,把屬於轉換接口的服務定義爲純虛函數。如果某個服務有多種可能的實現算法,則應該把它當作擴充接口。擴充接口與轉換接口不同,並不需要強迫用戶在派生類中重新定義它們,相反,如果派對生類中沒有給出擴展接口的新算法,剛將繼承父類中的算法。當用C++語言實現時,在基類中把這類服務定義爲普通的虛函數。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章