耦合與內聚相關概念和相關知識點
1.模組是一系列語句組成的,由識別符號組成的邊界元素來界定的。比如面嚮物件語言中的一個類、一個方法;也如面向過程中的函式。
2.內聚
所謂的內聚是指模組內的互動程度,內聚又分為一下幾種
偶然性內聚:元件的部件是不相關的,只是簡單地繫結成單個元件。
不足:程式的可讀性和複用性差
邏輯性內聚:把相似的功能(類如輸入,錯誤處理)放在一塊,通過傳遞一個引數來決定是哪一個功能來執行。
不足:介面可讀性差,程式碼複用性低
時間性內聚:所有的語句在同一時刻被啟用,就像電腦關機的時候,其他所有的程式都要被關閉。
不足:模組內的關聯不高,而與模組外的關聯卻很高,所以在維護的時候工作量會 比較大。
過程性內聚:簡單地把一系列過程關聯在一起
不足:程式碼的複用性比較差
通訊性內聚:操作相同的輸入資料或者輸出相同的輸出資料,可能產生多種功能。
不足:程式碼的複用性不高
順序內聚:從一個部分的輸出作為另一部分的輸入。可能包含幾個功能或部分不同的功能。
不足:程式碼的複用性不高
資訊聚合:執行多個功能,每個函式都有自己的入口點,每個函式都有獨立的程式碼,所有的功能都在相同的資料結構上執行。不同於邏輯銜接,因為功能沒有交織在一起。
功能內聚:每一部分都需要執行一個單一的功能。例如,計算平方根或排序陣列。通常在其他情況下可重複使用。維修容易。
以上幾種內聚程度由低到高
3.耦合
耦合是對一個軟體結構內不同模組之間互連程度的度量。耦合強弱取決於模組之間介面的複雜程度,進入或訪問一個模組的點,以及通過介面的資料。
內容耦合 :最高強度的耦合,發生以下情況就出現了內容耦合
1)一個模組訪問另一個模組的內部資料
2)一個模組不通過正常入口而轉到另一個模組的內部
3)兩個模組有一部分程式碼重疊
4)一個模組有多個入口
公共耦合 :就像一個類中的全域性變數類中的模組都直接操作這個全域性變數
控制耦合:通過控制標誌(作為引數或變數),一個模組控制另一個模組的處理步驟的順序。
印記耦合:如果一組模組通過引數表傳遞記錄資訊,就是印記耦合。事實上,這組模組共享了這個記錄,它是某一資料結構的子結構,而不是簡單變數。這要求這些模組都必須清楚該記錄的結構,並按結構要求對此記錄進行操作。在設計中應儘量避免這種耦合,它使在資料結構上的操作複雜化了
資料耦合 :如果一個模組訪問另一個模組時,彼此之間是通過資料引數(不是控制引數、公共資料結構或外部變數)來交換輸入、輸出資訊的,則稱這種耦合為資料耦合。由於限制了只通過引數表傳遞資料,按資料耦合開發的程式介面簡單、安全可靠。因此,資料耦合是鬆散的耦合,模組之間的獨立性比較強。在軟體程式結構中至少必須有這類耦合。
以上所有的耦合度有高到低,越低的耦合越好(儘量使用資料耦合,少用控制耦合和特徵耦合,限制公共環境耦合的範圍,完全不用內容耦合),總之一句話高內聚低耦合