?專欄:《Java面向對象程序設計》學習筆記
?# 第 7 章 面向對象設計的基本原則
7.1 UML 類圖簡介
類的 UML 圖
長方形垂直地分為三層。
-
第 1 層是名字層。
名字是常規字形,表明該類是具體類,如果類的名字是斜體字形,表明該類是抽象類
-
第 2 層是變量層。
-
第 3 層是方法層。
訪問權限:+表示 public -表示 private #表示 protected
-
接口 (lnterface)
-
泛化關系 (Generalizationl)
繼承關系 實線 空心三角形
-
關聯關系 (Association)
組合關系 實線 箭頭
-
依賴關系 (Dependency)
弱組合關系 虛線 箭頭
-
實現關系 (ReaIization)
實現接口 虛線 空心三角形
7.2 面向抽象原則
所謂面向抽象編程,是指當設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要數據是抽象類或接口聲明的變量,而不是具體類聲明的變量。
“面向抽象編程”,該原則的核心就是將類中經常需要變化的部分分割出來。其關鍵點是分割變化。
-
將每種可能的變化對應地交給抽象類的一個子類或實現接囗的一個類去負責
-
從而讓類的設計者不去關心具體實現,避免所設計的類依賴于具體的實現。
-
基于該原則就容易使設計的類應對用戶需求的變化。
7.3 “開-閉”原則
“開.閉”原則 (Open-Closed Principle) ,就是讓用戶的設計“對擴展開放,對修改關閉”。
本質是指當在一個設計中增加新的模塊時,不需要修改現有的模塊。
7.4 “多用組合、少用繼承”原則
繼承與復用
-
子類從父類繼承的方法在編譯時刻就確定下來了,所以無法在運行期間改變從父類繼承的方注的行為。
-
子類和父類的關系是強耦合關系,也就是說當父類的方法的行為更改時,必然導致子類發生變化
-
通過繼承進行復用也稱“白盒”復用,其缺點是父類的內部細節對于子類而言是可見的。
組合與復用
如果一個對象 a 組合了對象 b ,那么對象 a 就可以委托對象 b 調用其方法
- 通過組合對象來復用方法也稱“黑盒”復用,因為當前對象只能委托所包含的對象調用其方法,這樣一來,當前對象所包含的對象的方注的細節對當前對象是不可見的。
- 對象與所包含的對象屬于弱耦合關系,因為,如果修改當前對所包含的對象的類的代碼,不必修改當前對象的類的代碼。
- 當前對象可以在運行時刻動態指定所包含的對象
7.5 “高內聚-低耦合”原則
如果類中的方法是一組相關的行為,則稱該類是高內聚的,反之稱為低內聚的。
高內聚便于類的維護,而低內聚不利于類的維護。
低耦合就是盡量不盅讓一個類含有太多的其它類的實例的引用,以避免修改系統的其中一部分會影響到其它部分,
7.6 小結
- 在設計模式中,使用簡單的 UML 類圖可以簡潔地表達一個模式中類之間的關系。
- 面向抽象原則的核心思想是:在設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要數據是抽象類或接口聲明的變量,而不是具體類聲明的變量。
- “開-閉”原則的本質是指當一個設計中增加新的模塊時,不需要修改現有的模塊。我們在給出一個設計時,應當首先考慮到用戶需求的變化,將應對用戶變化的部分設計為對擴展開放,而設計的核心部分是經過精心考慮之后確定下來的基本結構,這部分應當是對修改關閉的,即不能因為用戶的需求變化而再發生變化,因為這部分不是用來應對需求變化的。
- “多用組合、少用繼承”原則的目的是減少類之間的強耦合關系。
- “高內聚-低耦合”原則的目的是盡量不要讓一個類含有太多的其他類的實例的引用,便于類的維護。