超類

超類

在軟體術語中,被繼承的類一般稱為“超類”,也有叫做父類。是繼承中非常重要的概念,它和子類一起形象地描述了繼承的層次關係。面向對象方法開發出的軟體具有較強的可重用性,重用依存於超類設計,沒有超類的對象系統不能物盡其用。超類設計的好與不好,首先看其內部重用率的高低,內部重用率高,必然外部重用率也高。

超類和子類

被繼承的類一般稱為“超類”或“父類”,繼承的類稱為“子類”。當子類繼承超類時,不必寫出全部的實例變數和方法,只需聲明該類繼承了的已定義的超類的實例變數和方法即可。超類、子類是繼承中非常重要的概念,它們形象地描述了繼承的層次關係。繼承節省了定義新類的大量工作,可以方便地重用代碼。例如,把汽車作為父類,當創建汽車的子類轎車時,品牌、價格、最高時速等屬性會自動地被定義,調用剎車方法時會自動調用在汽車類中定義的剎車方法。但一個子類不必非要使用繼承下來的屬性和方法,一個子類可以選擇覆蓋已有的屬性和方法,或添加新的屬性和方法。

由繼承產生的子類比超類具有更多的特徵,因此有時很容易混淆二者的概念。通常情況下,每個子類的對象“is”它的超類的對象。一個超類可以有很多個子類,所以超類的集合通常比它的任何一個子類集合都大。例如交通工具包含飛機、汽車、腳踏車等,而汽車子類只是交通工具中的一個小子集。

識別超類

對超類的抽象即實例對象的泛化原則,可以從下面幾個方面考慮:

1、尋找大多數實例對象的共同行為。

例如“列印報表”、“查詢靜態代碼表”、“錄人資料庫表數據”等。

2、超類的多態性設計,要保證使用超類繼承關係可以滿足各子類的操作要求。

例如,繼承同一個“數據錄人”祖先視窗,可以完成不同結構資料庫表的數據錄人。

3、利於信息的隱蔽性,不會破壞數據的完整性,利於將複雜問題簡單化。

例如,對具有複雜關係、結構及相關存取操作的資料庫表集的維護,如果不使用一個泛化類將數據結構及其相關操作封裝起來,下層程式設計師要想操作有關庫表,就必須對庫表設計有深人的了解,並且確保程式算法設計不得破壞數據的相關一致性,這將大大增加程式設計和測試的難度,要求程式設計師有較豐富的經驗。而採用這種泛化類 (公用函式、公用存儲過程)後,程式設計師所要做的只是發“訊息”和取“輸出信息”了。

4、有利於推行開發規範,統一界面風格。

如果能夠嚴格的統一編程風格,例如,所有螢幕按鈕的高、寬、起始位置都用精確到小數點後3位的X}y座標進行規定,那么這樣出來的產品使人看上去就有賞心悅目之感。但是如果人人都做界面視窗、按鈕的精細調整,工作量勢必成倍增長。採用螢幕界面模板超類的繼承關係,結合特殊化處理,問題便可迎刃而解。

超類實現

超類的設計和實現,必須在程式設計師普遍進行實例對象開發之前完成。也就是說,面向對象的上層系統設計人員必須“文武”(設計與編程)雙全,能夠擔負起超類對象的程式實現與測試任務。這與結構化方法的上層系統設計人員基本可以不編程有所不同。同時,超類對象在下層開發過程中必須經常吸收特殊化過程中的反饋(包括來自用戶的反饋),進行相應的調整修改。所以,採用面向對象方法設計中擔任超類對象設計與實現的設計人員,很難像結構化方法設計中那樣進人編程階段後就可以稍事輕鬆,他們往往始終離不開編程現場。

如果設計階段不預先設計和開發出超類對象,在同一項目的多數開發者之間沒有可以共同繼承的祖先對象,甚至在各個開發人員自己的作用範圍內都不使用繼承關係,那么這不僅不是面向對象,就連稱之為面向對象的編程都很勉強。

埋頭於自己分擔的程式,對結構化方法或許是必須的,但在面向對象方法中擔任程式設計的開發人員,應該先去調查對象數據辭典中有無其他開發人員已經完成、自己稍加特殊化就可重用的對象。從總體上說,對象的共享、重用應該由上層設計人員統一管理,以便保證對象風格的一致性,避免衝突。但是,對象的獨立性、封裝性和多態性都很便於重用,這是結構化系統所不能比擬的,而重用是軟體開發方法學的最重要思想之一。上層設計人員往往不可能面面俱到,懂得軟體設計理論的開發人員,即使只開發下層程式也應採用最省力、最有效率的編程方法,即大量使用重用對象。

相關詞條

相關搜尋

熱門詞條

聯絡我們