設計原則 什麼樣的情況下需要引入父類?

2021-09-06 11:42:14 字數 1084 閱讀 3818

讓我們站在抽象的角度思考這個問題,下面兩幅是我們討論的上下文。

設計1

設計2

面對這個問題,我可能給出的一種回答是:a和b為了復用方法(行為)或資料(狀態),如果我接受這個答案,那麼如何應對「b和c之間的復用」,很多語言都是單實現繼承的,這說明復用實現不是繼承的本質原因,我對這個答案不夠滿意,繼續思考。

如果我給出的答案是:為了引入抽象,這個答案本身就夠抽象了,估計會被很多人批評(期望被批評),先讓我簡單的解釋一下。

引入了父類,在某種程度上是引入了乙個繼承體系,父類就是這個繼承體系的抽象表示,使用者只需要關心這個抽象即可(父類),這也是「面向介面程式設計」的核心思想。父類定義了契約,子類實現契約,子類之間表現出多型。

這個答案也可以這麼解說:為了復用契約、為了面向介面程式設計、為了多型。

總結:繼承可以實現復用,不要為了復用而使用繼承。

假如base2和base3都是合理的,如何復用b和c之間的**?抽象的表達是:如何在不同的繼承體系之間復用**?

讓我們舉個例子

icompareable介面定義了乙個方法compare,如果a.compare(b)的結果為-1,表示ab。

我們將icompareable.compare命名為「定律方法」。

compareableextentions 擴張了icompareable,提供了:less、lessequal、greate、greateequal、equal和between。

我們將less、lessequal、greate、greateequal、equal和between命名為「推論方法」。

總結:在多個繼承體系中,用介面繼承復用「定律方法」,用摻入(c#中叫擴張方法)復用「推論方法」。

每天能想明白一點東西,真是讓人開心,感謝和群裡的兄弟們,這個問題暫時告一段落,做好否定自己的準備。

什麼樣的公司需要高手,什麼樣的公司需要普通水平員工

觀點一 小公司需要全是高手,大公司需要少量高手和大量的普通水平的職員 兩三個人的專案組,什麼都要幹,什麼事情都要那兩三個人幹,個個都是全能多面手。大公司是現代化管理,高度分工,只需要會一項技術即可。員工大多數是流水線上的裝配工,技術要求低。觀點二 差公司需要高手,好公司需要普通員工。差公司,指的是沒...

什麼情況下,需要做血液透析?

血液透析 是 急慢性腎衰竭和其他一些嚴重疾病的重要方法。常見疾病的透析指徵如下 急性腎損傷 一 透析指徵 出現下列任何一種情況即可進行透析 一 血清肌酐 354umol l 4mg dl 或尿量 0.3ml kg h 持續24小時以上。二 高鉀血症,血清鉀 6.5mmol l。三 血hco3 15 ...

什麼情況下需要建立mysql索引

1 較頻繁地作為查詢條件的字段 這個都知道。什麼是教頻繁呢?分析你執行的所有sql語句。最好將他們乙個個都列出來。然後分析,發現其中有些欄位在大部分的sql語句查詢時候都會用到,那麼就果斷為他建立索引。2 唯一性太差的字段不適合建立索引 什麼是唯一性太差的字段。如狀態字段 型別字段。那些只儲存固定幾...