4.2 內聚和耦合
模塊獨立
- 獨立的模塊容易開發。
- 獨立的模塊容易測試和維護。
模塊的獨立程度 可以由兩個標準衡量:內聚、耦合
耦合
耦合是對軟體結構內不同模塊之間聯繫程度的度量。耦合強弱取決於模塊間介面的複雜程度,進入或訪問一個模塊的點,以及通過介面的數據。
模塊耦合分為數據耦合、控制耦合、特徵耦合、公共環境耦合、內容耦合
① 數據耦合
兩個模塊間 只通過參數交換信息。
數據耦合是低耦合,系統中必然存在。
public class Main { public static void main(String[] args) { Dog d = new Dog("旺財"); }}class Dog { private String name; public Dog(String name) { this.name = name; }}
② 控制耦合
傳遞的信息中有控制信息(儘管有時這種控制信息以數據的形式出現),則這種耦合稱為控制耦合。
控制耦合是中等程度的耦合。
public static void update(boolean insertFlag) { if (insertFlag) { // 插入 } else { // 更新 } }
③ 特徵耦合
當把整個數據結構作為參數傳遞,而被調用的模塊只需要使用其中一部分數據元素時,就出現了特徵耦合。
public class Main { private static void 特徵耦合(Dog d) { System.out.println(d.getName()); } private static void 非特徵耦合(String name) { System.out.println(name); } public static void main(String[] args) { Dog d = new Dog("旺財"); 特徵耦合(d); 非特徵耦合(d.getName()); }}class Dog { private String name; private String variety; public Dog(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getVariety() { return variety; } public void setVariety(String variety) { this.variety = variety; }}
④ 公共環境耦合
當多個模塊通過一個公共數據環境相互作用時,它們之間的耦合稱為公共環境耦合。公共環境可以是全局變數、共享數據、任何存儲介質上的文件等。
公共環境耦合的複雜程度隨耦合的模塊個數而變化,當耦合的模塊個數增加時,複雜程度而顯著增加。
只有兩個模塊有公共環境,耦合有下面兩種可能。
(1) 一個模塊往公共環境送數據,另一個模塊從公共環境取數據。這是數據耦合的一種形式,是比較鬆散的耦合。
(2) 兩個模塊都既往公共環境送數據又從裡面取數據,這種耦合比較緊密,介於數據耦合和控制耦合之間。
⑤ 內容耦合
最高程度的耦合。
表現為:
- 一個模塊直接訪問另一模塊的內部數據,則稱這兩個模塊為內容耦合
public class Main { public static void main(String[] args) { Dog d = new Dog("旺財"); System.out.println(d.name);//內容耦合 }}class Dog { public String name; public Dog(String name) { this.name = name; }}
- 一個模塊不通過正常入口而轉到另一個模塊的內部
思考:有一個關鍵字Java不用,也不讓你用,原來是ta……
- 一個模塊有多種功能
內聚
內聚:衡量模塊內各元素結合的緊密程度。
內聚和耦合是密切相關的,模塊內的高內聚往往意味著模塊間的低耦合。
高內聚是指相關操作盡量聚集到單獨的類或文件中,盡量少的牽連到其他類或者文件。
設計原則中的「信息隱藏和局部化」就是用於提高內聚的手段。
推薦閱讀:
※微服務設計—事件驅動架構
※環保市場定製化需求增多,安賜應用中望CAD提高響應速度
※簡單設計原則
※Raindrop 書籤整理軟體收費版使用感受
※系統設計師必備技能與工具有哪些?