版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-超類

科學百科
原創(chuàng)
科學百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

超類和子類

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

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

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

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

例如“打印報表”、“查詢靜態(tài)代碼表”、“錄人數(shù)據(jù)庫表數(shù)據(jù)”等。

2、超類的多態(tài)性設計,要保證使用超類繼承關(guān)系可以滿足各子類的操作要求。

例如,繼承同一個“數(shù)據(jù)錄人”祖先窗口,可以完成不同結(jié)構(gòu)數(shù)據(jù)庫表的數(shù)據(jù)錄人。

3、利于信息的隱蔽性,不會破壞數(shù)據(jù)的完整性,利于將復雜問題簡單化。

例如,對具有復雜關(guān)系、結(jié)構(gòu)及相關(guān)存取操作的數(shù)據(jù)庫表集的維護,如果不使用一個泛化類將數(shù)據(jù)結(jié)構(gòu)及其相關(guān)操作封裝起來,下層程序員要想操作有關(guān)庫表,就必須對庫表設計有深人的了解,并且確保程序算法設計不得破壞數(shù)據(jù)的相關(guān)一致性,這將大大增加程序設計和測試的難度,要求程序員有較豐富的經(jīng)驗。而采用這種泛化類 (公用函數(shù)、公用存儲過程)后,程序員所要做的只是發(fā)“消息”和取“輸出信息”了。

4、有利于推行開發(fā)規(guī)范,統(tǒng)一界面風格。

如果能夠嚴格的統(tǒng)一編程風格,例如,所有屏幕按鈕的高、寬、起始位置都用精確到小數(shù)點后3位的X}y座標進行規(guī)定,那么這樣出來的產(chǎn)品使人看上去就有賞心悅目之感。但是如果人人都做界面窗口、按鈕的精細調(diào)整,工作量勢必成倍增長。采用屏幕界面模板超類的繼承關(guān)系,結(jié)合特殊化處理,問題便可迎刃而解。

面向?qū)ο蠓椒ǖ某悓崿F(xiàn)超類的設計和實現(xiàn),必須在程序員普遍進行實例對象開發(fā)之前完成。也就是說,面向?qū)ο蟮纳蠈酉到y(tǒng)設計人員必須“文武”(設計與編程)雙全,能夠擔負起超類對象的程序?qū)崿F(xiàn)與測試任務。這與結(jié)構(gòu)化方法的上層系統(tǒng)設計人員基本可以不編程有所不同。同時,超類對象在下層開發(fā)過程中必須經(jīng)常吸收特殊化過程中的反饋(包括來自用戶的反饋),進行相應的調(diào)整修改。所以,采用面向?qū)ο蠓椒ㄔO計中擔任超類對象設計與實現(xiàn)的設計人員,很難像結(jié)構(gòu)化方法設計中那樣進人編程階段后就可以稍事輕松,他們往往始終離不開編程現(xiàn)場。

如果設計階段不預先設計和開發(fā)出超類對象,在同一項目的多數(shù)開發(fā)者之間沒有可以共同繼承的祖先對象,甚至在各個開發(fā)人員自己的作用范圍內(nèi)都不使用繼承關(guān)系,那么這不僅不是面向?qū)ο螅瓦B稱之為面向?qū)ο蟮木幊潭己苊銖姟?/p>

埋頭于自己分擔的程序,對結(jié)構(gòu)化方法或許是必須的,但在面向?qū)ο蠓椒ㄖ袚纬绦蛟O計的開發(fā)人員,應該先去調(diào)查對象數(shù)據(jù)辭典中有無其他開發(fā)人員已經(jīng)完成、自己稍加特殊化就可重用的對象。從總體上說,對象的共享、重用應該由上層設計人員統(tǒng)一管理,以便保證對象風格的一致性,避免沖突。但是,對象的獨立性、封裝性和多態(tài)性都很便于重用,這是結(jié)構(gòu)化系統(tǒng)所不能比擬的,而重用是軟件開發(fā)方法學的最重要思想之一。上層設計人員往往不可能面面俱到,懂得軟件設計理論的開發(fā)人員,即使只開發(fā)下層程序也應采用最省力、最有效率的編程方法,即大量使用重用對象。2