C# 耦合性與內聚性

1) 耦合性

  •  耦合性是對一個軟件結構內部不同模塊間聯繫緊密程度的度量指標。

  •  決定耦合性高低的主要因素

  由於模塊間的聯繫是通過模塊接口實現的,因此,模塊耦合性的高低主要取決於模塊接口的複雜程度、調用模塊的方式以及通過模塊接口的數據。模塊間的耦合性主要可劃分爲如下幾種類型。

(1) 數據耦合。若兩個模塊之間僅通過模塊參數交換信息,且交換的信息全部爲簡單數據,則稱這種耦合爲數據耦合。數據耦合的耦合性最低,通常軟件中都包含有數據耦合。數據耦合的例子如下所示:

sum(int a,int b)
{
    int c;
    c=a+b;
    return(c);
}

main()
{
    int x,y; 
    printf("x+y= %d",sum(x,y));
}

(2) 公共耦合。若兩個或多個模塊通過引用公共數據相互聯繫,則稱這種耦合爲公共耦合。例如,在程序中定義了全局變量,並在多個模塊中對全局變量進行了引用,則引用全局變量的多個模塊間就具有了公共耦合關係。

(3) 控制耦合。若模塊之間交換的信息中包含有控制信息(儘管有時控制信息是以數據的形式出現的),則稱這種耦合爲控制耦合。控制耦合是中等程度的耦合,它會增加程序的複雜性。控制耦合的例子如下所示:

void output(flag)
{
    if (flag) 
      printf("OK! ");
    else 
      printf("NO! ");
}

main()
{
    int flag;
    output(flag);
}

(4) 內容耦合。若一個模塊對另一模塊中的內容(包括數據和程序段)進行了直接的引用甚至修改,或通過非正常入口進入到另一模塊內部,或一個模塊具有多個入口,或兩個模塊共享一部分代碼,則稱模塊間的這種耦合爲內容耦合。內容耦合是所有耦合關係中程度最高的,會使因模塊間的聯繫過於緊密而對後期的開發和維護工作帶來很大的麻煩。

2) 內聚性

內聚性是對一個模塊內部各個組成元素之間相互結合的緊密程度的度量指標。模塊中組成元素結合的越緊密,模塊的內聚性就越高,模塊的獨立性也就越高。理想的內聚性要求模塊的功能應明確、單一,即一個模塊只做一件事情。模塊的內聚性和耦合性是兩個相互對立且又密切相關的概念。

  經實踐證明,保證模塊的高內聚性比低耦合性更爲重要,在軟件設計時應將更多的注意力集中在提高模塊的內聚性上。模塊的內聚性主要可劃分爲如下幾種不同的類型。

(1) 偶然內聚。若一個模塊由多個完成不同任務的語句段組成,各語句段之間的聯繫十分鬆散或根本沒有任何聯繫,則稱此模塊的內聚爲偶然內聚。

(2) 邏輯內聚。這種模塊是把幾種功能組合在一起,每次調用時,則由傳遞給模塊的判定參數來確定該模塊應執行哪一種功能。

(3) 時間內聚。若一個模塊包含了需要在同一時間段中執行的多個任務,則稱該模塊的內聚爲時間內聚。例如,將多個變量的初始化放在同一個模塊中實現,或將需要同時使用的多個庫文件的打開操作放在同一個模塊中,都會產生時間內聚的模塊。

(4) 過程內聚。若一個模塊中的各個部分相關,並且必須按特定的次序執行,則稱該模塊的內聚爲過程內聚。在結構化程序中,通常採用程序流程圖作爲設計軟件和確定模塊劃分的工具,因此,這樣得到的模塊往往具有過程內聚的特性。

(5) 通信內聚。若一個模塊中的各個部分使用同一個輸入數據或產生同一個輸出數據,則稱該模塊的內聚爲通信內聚。

(6) 順序內聚。若一個模塊中的各個部分都與同一個功能密切相關,並且必須按照先後順序執行(通常前一個部分的輸出數據就是後一個部分的輸入數據),則稱該模塊的內聚爲順序內聚。

(7) 功能內聚。若一個模塊中各個組成部分構成一個整體並共同完成一個單一的功能,則稱該模塊的內聚爲功能內聚。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章