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 書籤整理軟體收費版使用感受
系統設計師必備技能與工具有哪些?

TAG:軟體工程 | 軟體設計 | 軟體開發 |