封裝體繼承用於實作一般化-特殊化、利用多型性及重複使用實作。 這裡的關鍵字是「實作」- 這是一種技術,主要是重複使用封裝體的內部結構,不是封裝體的外部行為。
繼承經常濫用在原本以更簡單的設計技術即可輕易完成的事。
在一般化-特殊化中使用繼承
繼承有三種。按照複雜性由低(最理想)至高(最不理想)排列如下:
-
介面繼承 - 只繼承埠和通訊協定,這是最理想的繼承類型
-
結構繼承 - 繼承介面加上結構化包含階層(適用於架構)
-
行為繼承 - 除了介面和結構繼承,也重複使用行為式程式碼和狀態機
結構繼承和行為繼承會引起一些問題:
-
繼承具有的高度耦合性,導致超類別的變更會擴散到子類別。
-
在子類別中需要刪除超類別的行為和結構,意謂著繼承使用不當(通常指策略上的程式碼重複使用性)。 重新建構類別和封裝體及適當使用委任是較適當的對策。
-
繼承意謂著在類別階層中將設計決策上移,導致不理想的設計和編譯相依性。
其他問題包括:
-
決策不一定適用於所有處理狀況。
-
事實上,引進繼承會造成重複使用更困難,因為設計元素更緊密糾纏在一起。
-
設計變得更脆弱,因為任何導致決策無效的新需求會引發重大的問題。
-
設計必須非常靈活才有效果,但這通常很困難。這也是設計可重複使用的架構不簡單的原因!
所有包含結構/行為的設計有預設的決策和假設(明確或隱含)。但重要的問題是:您非常肯定該決策/假設一定都有效嗎? 如果不是,應該如何移除或變更?
|