10 合成復用原則 物件導向設計原則

2022-05-31 01:12:09 字數 1208 閱讀 2736

合成復用原則(composite reuse principle,crp)又叫組合/聚合復用原則(composition/aggregate reuse principle,carp)。它要求在軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。

如果要使用繼承關係,則必須嚴格遵循黎克特制替換原則。合成復用原則同黎克特制替換原則相輔相成的,兩者都是開閉原則的具體實現規範。

通常類的復用分為繼承復用和合成復用兩種,繼承復用雖然有簡單和易實現的優點,但它也存在以下缺點。

繼承復用破壞了類的封裝性。因為繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種復用又稱為「白箱」復用。

子類與父類的耦合度高。父類的實現的任何改變都會導致子類的實現發生變化,這不利於類的擴充套件與維護。

它限制了復用的靈活性。從父類繼承而來的實現是靜態的,在編譯時已經定義,所以在執行時不可能發生變化。

採用組合或聚合復用時,可以將已有物件納入新物件中,使之成為新物件的一部分,新物件可以呼叫已有物件的功能,它有以下優點。

它維持了類的封裝性。因為成分物件的內部細節是新物件看不見的,所以這種復用又稱為「黑箱」復用。

新舊類之間的耦合度低。這種復用所需的依賴較少,新物件訪問成分物件的唯一方法是通過成分物件的介面。

復用的靈活性高。這種復用可以在執行時動態進行,新物件可以動態地引用與成分物件型別相同的物件。

合成復用原則是通過將已有的物件納入新物件中,作為新物件的成員物件來實現的,新物件可以呼叫已有物件的功能,從而達到復用。

下面以汽車分類管理程式為例來介紹合成復用原則的應用。

【例1】汽車分類管理程式。

分析:汽車按「動力源」劃分可分為汽油汽車、電動汽車等;按「顏色」劃分可分為白色汽車、黑色汽車和紅色汽車等。如果同時考慮這兩種分類,其組合就很多。圖 1 所示是用繼承關係實現的汽車分類的類圖。

圖1 用繼承關係實現的汽車分類的類圖

從圖 1 可以看出用繼承關係實現會產生很多子類,而且增加新的「動力源」或者增加新的「顏色」都要修改源**,這違背了開閉原則,顯然不可取。但如果改用組合關係實現就能很好地解決以上問題,其類圖如圖 2 所示。

圖2 用組合關係實現的汽車分類的類圖

10 合成復用原則 物件導向設計原則

合成復用原則是物件導向設計原則的 7 條原則中剩下的最後一條,下面我們將對其進行詳細地介紹。合成復用原則 composite reuse principle,crp 又叫組合 聚合復用原則 composition aggregate reuse principle,carp 它要求在軟體復用時,要盡...

物件導向設計原則 合成復用原則

合成復用原則又稱為組合 聚合復用原則 composition aggregate reuse principle,carp 其定義如下 合成復用原則 composite reuse principle,crp 盡量使用物件組合,而不是繼承來達到復用的目的。合成復用原則就是在乙個新的物件裡通過關聯關係...

物件導向設計原則之合成復用原則

合成復用原則又稱為組合 聚合復用原則 composition aggregate reuse principle,carp 其定義如下 合成復用原則 composite reuse principle,crp 盡量使用物件組合,而不是繼承來達到復用的目的。合成復用原則就是在乙個新的物件裡通過關聯關係...