真理是大家看出來的,故將園內前輩的創新觀點蒐列於此,一是感謝分享,二是補足一家之言的不足,望能匯聚成領域知識,惠己惠眾。
先前在園內看過許多前輩對抽象類別與介面的探討,結論各有千秋。其中印象最深的是 dunai 與 shenfx 的總結:
- dunai: 抽象類別是提取具體類別的公因式;介面是為了將一些不相關的類別「雜湊」成一個共同群體。語法細節非重點。
- shenfx: 在差異較大的物件間尋求功能共性時用介面;在共性較多的物件間尋求功能差異時用抽象類別。
MSDN 對抽象類別與介面的建議如下:
- 預計建立元件多個版本時,建立抽象類別。抽象類別提供簡單易行的版本控制:更新基底類別,所有繼承類別自動更新。介面一旦建立即不可變更,需新版本時必須建立全新介面。
- 功能將在廣泛異質物件間使用時,使用介面。抽象類別主要用於關係密切的物件;介面最適合為不相關的類別提供通用功能。
- 設計小而精簡的功能區塊用介面;設計大型功能單元用抽象類別。
- 需在元件所有實作間提供通用的已實作功能時,用抽象類別。抽象類別允許部分實作;介面不包含任何成員實作。
再看 Dflying Chen 與一醉解千愁 的見解:
- Dflying Chen: 介面用來定義兩個物件通訊的契約;抽象類別用來封裝物件間共用的行為。二者設計初衷完全不同,可惜實務中常被誤解。
- 一醉解千愁: 介面 — 粗略的技術規範;抽象類別 — 對粗略技術規範作簡單說明;類別 — 技術規範的具體實作。
大型專案中,專案經理依功能分塊,各塊間靠公開介面聯繫。介面不動,內部代碼隨意修改,升級簡單,代碼復用度高。這也說明介面設計相對重要,故花長篇幅引用前輩觀點闡述抽象類別與介面。