- 物件導向(OOP)概念複習
介紹VB中各種OOP的語法,當成複習用。 - 物件導向程式(OOP)設計入門(一)--物件設計
介紹VB中Class、 Object及相關成員。 - 物件導向程式(OOP)設計入門(二)--物件建立
介紹VB中Instance的建立,建構式、屬性、Me、多載、共用成員。 - 物件導向程式(OOP)設計入門(三)--物件導向
介紹VB中物件導向及初始化、多重建構式。 - 物件導向程式(OOP)設計入門(四)--繼承Inheritance
介紹VB中繼承。 - 物件導向程式(OOP)設計入門(五)--覆寫Overrides
介紹VB中覆寫。 - 物件導向程式(OOP)設計入門(六)--抽象(Abstract)Class
介紹VB中Abstract Class,在C#中直接使用Abstract關鍵字,我覺得很好,Abstract本身就是抽象的意思,不知道為什麼VB還要另外用一個MustInherit、MustOverride來當關鍵字,與「抽象」一點邊都沾不上,在記憶與聯想上就要小心一點。 - 物件導向程式(OOP)設計入門(七)--介面Interface
介紹VB中Interface。
看完最後兩篇,你或許會覺得「Abstract」與「Interface」很像,但本質上兩者是不同的,你必須就使用的時機點與功能上的差異來比較,就能清楚了解什麼時候使用Abstract,什麼時間點使用Interface。
Abstract:
- Abstract Class不能Instance。即不能使用New關鍵字初始化。
- Abstract Class是必須被衍生Class覆寫方法。
- 衍生Class可以部份實作。
- 如果Class中包含Abstract Method(抽象方法),那麼此Class就必須定義為Abstract Class。
- 一個Class只能繼承一個Abstract Class。
- Interface不能Instance,不能有建構式、成員。
- 不能有修飾詞,Public、Private…等。
- 不能宣告為共用成員。
- 實作Interface必須實作Interface所有方法及屬性。
- 一個Class可實作多個Interface。
如果從上述角度來看,除非你是「架構師」等級的人材,不然應該不太常使用Interface,而會常使用到Class與Abstract Class。等到你在整個Class與Abstract Class有一個層度後,那你可以更進一步向「Design Patterns(設計樣式)」來學習。
Dear KKBruce,
回覆刪除看了你的 OOP for VB 入門篇獲益良多,感謝!
此外,可否針對這一段話多做些解釋↓
『Abstract Class一般都是在Class程式碼撰寫過程慢慢被發現,進而從Class提升為Abstract Class,我們應盡量讓Abstract Class擁有最多的共用程式碼,盡量減少資料。』
Dear CM:
回覆刪除我這樣解釋好了:
我們很少一開始就直接寫Abstract Class,而是先寫Class,例如:
Class dog
function 叫()
Class cat
function 叫()
Class horse
function 叫()
我們發現dog、cat、horse都是動物,而且都有一個"叫()"的方法,所以我們產生一個Abstract Class叫動物,然後定義一個"叫()"的抽象方法,讓dog、cat、horse…等需要的Class去繼承實現各自"叫()"的方法。
Abstract Class animal
function 叫()
Class dog繼承animal後去實現"叫()"這個方法,牠實現出來的"叫()"是"汪汪"聲音。
Class catg繼承animal後去實現"叫()"這個方法,牠實現出來的"叫()"是"喵喵"聲音。
Class horsedog繼承animal後去實現"叫()"這個方法,牠實現出來的"叫()"是"馬~~"聲音。
你會發現,在Abstract Class之中都是共同程式碼("叫()"方法),所以盡量減少"資料",資料即是"private name as string",name就是資料。
讓Abstract Class只單純保有{抽象方法}就對了。
您好,
回覆刪除請問抽象類別本身的作用是作為分門別類用?
然後在該類別裡面提供共用的抽象方法,
讓其子類別去繼承並實作;
之後使用者閱讀相關技術文件時就知道這些子類別
都歸類在這個抽象類別
(就像生物的分類:界 門 綱 目 科 屬 種)。
我本身是學Java的,
覺得VB從.Net開使出現物件導向這個重大變革之後,
從Java再跨過來學VB就覺得相似度很高,很快入手:)
.Net Framework =
Java Runtime Enviroment
ASP透過VB語法寫出Web App =
JSP透過Java語法寫出Web App
除了跨平台的差異,其它都很相似:)
有此一說:「M?的工程師是邊看Java邊開發出.NET Framework!」So...很像、非常像、超級像...這樣才起吸引這些使用C/Java的人材轉到.NET來!
回覆刪除從撰寫程式過程中來看,Abstract Class是從Child Class中發現了"共用"的東西,再由Child Class去繼承Base Class。
你舉的例子很好,生物的分類也是"慢慢在發現的過程裡發現一些物種的{共通性}",鳥大概沒有四隻腳吧!有了這些{共通性}才有辦法去分類!
我再延伸一下我的舉例:
動物 --> 狗
其實"狗"也可以改為"Abstract Class",因為狗下面還有很多"品種",像我家養"西施",宜蘭家養"土狗",每一品種都有差異,但他們都叫狗,所以把這些"狗"{共通性}的特質放到"狗抽象類別"中,再由"繼承的類別"去實作這些共通性特質。
動物 --> 狗 --> 西施
狗 --> 西施
狗 --> 土狗
但記得,西施或土狗除了實作"狗抽象類別"外,也必須實作"動物抽象類別",因為狗抽象類別是繼承動物抽象類別。所以牠是"狗"也是"動物"。
有點轉來轉去,希望你看得懂。
Dear KKBruce,
回覆刪除感激您對於Abstract Class的詳細回答!
請問會有OOP for VB 的進階篇和實用篇的寫作計畫嗎?
再次感謝您的無私分享。
1. 如果有機會
回覆刪除2. 如果有能力
3. 如果有時間
有幫助喔,多謝。
回覆刪除