一 什麼是低耦合
耦合度(Coupling)是對模組間關聯程度的度量。耦合的強弱取決與模組間介面的複雜性、調用模組的方式以及通過介面傳送資料的多少。 模組間的耦合度是指模組之間的依賴關係,包括控制關係、調用關係、資料傳遞關係。模組間聯絡越多,其耦合性越強,同時表明其獨立性越差。降低模組間的耦合度能減少模組間的影響,防止對某一模組修改所引起的“牽一髮動全身”的水波效應,保證系統設計順利進行。
內聚和耦合密切相關,同其它模組存在強耦合關係的模組常意味這弱內聚,強內聚常意味著弱耦合。
耦合度就是某模組(類)與其它模組(類)之間的關聯、感知和依賴的程度,是衡量代碼獨立性的一個指標,也是軟體工程設計
及編碼品質評價的一個標準。耦合的強度依賴於以下幾個因素:
(1)一個模組對另一個模組的調用;
(2)一個模組向另一個模組傳遞的資料量;
(3)一個模組施加到另一個模組的控制的多少;
(4)模組之間介面的複雜程度。
下面這些情況會造成類A、B之間的耦合:
a. A是B的屬性
b. A調用B的執行個體的方法
c. A的方法中引用了B,例如B是A方法的傳回值或參數。
d. A是B的子類,或者A實現了B
耦合按從強到弱的順序可分為以下幾種類型:
a)非直接耦合:兩模組間沒有直接關係,之間的聯絡完全是通過主模組的控制和調用來實現的
b)資料耦合:一個模組訪問另一模組,彼此間通過簡單資料參數來交換輸入、輸出資訊。這裡的簡單資料參數不同於控制參數、公用資料結構或外部變數。
c)標記耦合:如一組模組通過參數表傳遞記錄資訊,就是標記耦合。這個記錄是某一資料結構的子結構,不是簡單變數。
d)控制耦合:一個模組通過傳遞開關、標誌、名字等控制資訊,明顯的控制選擇另一模組的功能
e)外部耦合:一組模組都訪問同一全域簡單變數而不是同一全域資料結構,而且不是通過參數傳遞該全域變數的資訊
f)公用耦合:一組模組都訪問同一個公用數
據環境。該公用資料環境可以是全域資料結構、共用的通訊區、記憶體的公用覆蓋區等。
g)內容耦合:一個模組直接修改另一個模組的資料,或直接轉入另一個模組
內聚度是指內部各元素之間聯絡的緊密程度,模組的內聚種類通常可分為7種,按其內聚度從低
到高的次序依此為:偶然內聚、邏輯內聚、瞬時內聚、過程內聚、通訊內聚、順序內聚、功能內聚。
二 為什麼要低耦合
耦合度很高的情況下,維護代碼時修改一個地方會牽連到很多地方
三 如何?低耦合
1、少使用類的繼承,多用介面隱藏實現的細節。因為繼承本身就是耦合,一個類的實現必須依賴於另外一個類,如果基類不存在了就不能工作了。 java物件導向編程引入介面除了支援多態外, 隱藏實現細節也是其中一個目的。
2、模組的功能化分儘可能的單一,道理也很簡單,功能單一的模組供其它模組調用的機會就少。(其實這是高內聚的一種說法,高內聚低耦合一般同時出現,為了限制篇幅,我們將在以後的版期中討論)。
3、遵循一個定義只在一個地方出現。
4、少使用全域變數。
5、類屬性和方法的聲明少用public,多用private關鍵字,
6、多用設計模式,比如採用MVC的設計模式就可以降低介面與商務邏輯的耦合度。
7、盡量不用“寫入程式碼”的方式寫程式,同時也盡量避免直接用SQL語句操作資料庫。
8、最後當然就是避免直接操作或調用其它模組或類(內容耦合);如果模組間必須存在耦合,原則上盡量使用資料耦合,少用控制耦合,
限制公用耦合的範圍,避免使用內容耦合。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
四 什麼是高內聚
故名思議,表示內部間聚集、關聯的長度,那麼高內聚就是指要高度的聚集和關聯。
高內聚:類與類之間的關係而定,高,意思是他們之間的關係要簡單,明了,不要有很強的關係,不然,運行起來就會出問題。一個類的運行影響到其他的類。
五 高內聚的好處
由於高內聚具備魯棒性,可靠性,可重用性,可讀性等優點,模組設計推薦採用高內聚。
六 如何?高內聚
每一個類完成特定的獨立的功能,這個就是高內聚。