軟件開發模塊設計之高內聚低耦合

軟件設計中通常用耦合度和內聚度作爲衡量模塊獨立程度的標準。劃分模塊的一個準則就是高內聚低耦合。就是同一個模塊內的各個元素之間要高度緊密,但是各個模塊之間的相互依存度卻要不那麼緊密。

內聚
內聚是一個模塊內部各成分之間相關聯程度的度量。內聚按緊密程度從低到高排列次序爲偶然內聚、邏輯內聚、時間內聚、過程內聚、通信內聚、順序內聚、信息內聚、功能內聚。但是緊密程度的增長是非線性的。偶然內聚和邏輯內聚的模塊聯繫鬆散,後面幾種內聚相差不多,功能內聚一個功能、獨立性強、內部結構緊密,是最理想的內聚。

(1)偶然內聚
如果一個模塊的各成分之間毫無關係,則稱爲偶然內聚,也就是說模塊完成一組任務,這些任務之間的關係鬆散,實際上沒有什麼聯繫。
(2)邏輯內聚
幾個邏輯上相關的功能被放在同一模塊中,則稱爲邏輯內聚。如一個模塊讀取各種不同類型外設的輸入。儘管邏輯內聚比偶然內聚合理一些,但邏輯內聚的模塊各成分在功能上並無關係,即使局部功能的修改有時也會影響全局,因此這類模塊的修改也比較困難。
(3)時間內聚
如果一個模塊完成的功能必須在同一時間內執行(如系統初始化),但這些功能只是因爲時間因素關聯在一起,則稱爲時間內聚。
(4)通信內聚
如果一個模塊的所有成分都操作同一數據集或生成同一數據集,則稱爲通信內聚。
(5)順序內聚
如果一個模塊的各個成分和同一個功能密切相關,而且一個成分的輸出作爲另一個成分的輸入,則稱爲順序內聚。
(6)過程內聚
構件或者操作的組合方式是,允許在調用前面的構件或操作之後,馬上調用後面的構件或操作,即使兩者之間沒有數據進行傳遞。
模塊完成多個需要按一定的步驟一次完成的功能。(過程相關—控制耦合)。例如:在用程序流程圖設計模塊時,若將程序流程圖中的一部分劃出各自組成模塊,便形成過程內聚。
(7)信息內聚
模塊完成多個功能,各個功能都在同一數據結構上操作,每一項功能有一個唯一的入口點。這個模塊將根據不同的要求,確定該模塊執行哪一個功能。由於這個模塊的所有功能都是基於同一個數據結構(符號表),因此,它是一個信息內聚的模塊。
(8)功能內聚
模塊的所有成分對於完成單一的功能都是必須的,則稱爲功能內聚。

耦合
軟件工程中對象之間的耦合度就是對象之間的依賴性。對象之間的耦合越高,維護成本越高。因此對象的設計應使類和構件之間的耦合最小。耦合性也叫耦合度,是程序結構中各個模塊之間相互關聯的度量。

耦合可以分爲以下幾種,它們之間的耦合度由高到低排列如下:
(1) 內容耦合。當一個模塊直接修改或操作另一個模塊的數據時,或一個模塊不通過正常入口而轉入另一個模塊時,這樣的耦合被稱爲內容耦合。內容耦合是最高程度的耦合,應該避免使用之。
(2) 公共耦合。兩個或兩個以上的模塊共同引用一個全局數據項,這種耦合被稱爲公共耦合。在具有大量公共耦合的結構中,確定究竟是哪個模塊給全局變量賦了一個特定的值是十分困難的。
(3) 外部耦合 。一組模塊都訪問同一全局簡單變量而不是同一全局數據結構,而且不是通過參數表傳遞該全局變量的信息,則稱之爲外部耦合。
(4) 控制耦合 。一個模塊通過接口向另一個模塊傳遞一個控制信號,接受信號的模塊根據信號值而進行適當的動作,這種耦合被稱爲控制耦合。
(5) 標記耦合 。若一個模塊A通過接口向兩個模塊B和C傳遞一個公共參數,那麼稱模塊B和C之間存在一個標記耦合。
(6) 數據耦合。模塊之間通過參數來傳遞數據,那麼被稱爲數據耦合。數據耦合是最低的一種耦合形式,系統中一般都存在這種類型的耦合,因爲爲了完成一些有意義的功能,往往需要將某些模塊的輸出數據作爲另一些模塊的輸入數據。
(7) 非直接耦合 。兩個模塊之間沒有直接關係,它們之間的聯繫完全是通過主模塊的控制和調用來實現的。
總結:耦合是影響軟件複雜程度和設計質量的一個重要因素,在設計上我們應採用以下原則:如果模塊間必須存在耦合,就儘量使用數據耦合,少用控制耦合,限制公共耦合的範圍,儘量避免使用內容耦合。

模塊間的耦合度是指模塊之間的依賴關係,包括控制關係、調用關係、數據傳遞關係。模塊間聯繫越多,其耦合性越強,同時表明其獨立性越差( 降低耦合性,可以提高其獨立性)。

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