高內聚低耦合的理解


在做rm比賽的過程中,發現文件和函數的代碼規范邏輯十分重要,這不僅影響到自己看代碼的方便與否,還影響到下屆隊員對我的代碼的理解。因此打算開始規范自己的代碼習慣,養成良好習慣,以后工作也能用上。

以下轉自百度百科


 

內聚與耦合

耦合:是對模塊間關聯程度的度量。耦合的強弱取決與模塊間接口的復雜性、調用模塊的方式以及通過界面傳送數據的多少。 模塊間的耦合度是指模塊之間的依賴關系,包括控制關系、調用關系、數據傳遞關系。模塊間聯系越多,其耦合性越強,同時表明其獨立性越差。降低模塊間的耦合度能減少模塊間的影響,防止對某一模塊修改所引起的“牽一發動全身”的水波效應,保證系統設計順利進行。 耦合度就是某模塊(類)與其它模塊(類)之間的關聯、感知和依賴的程度,是衡量代碼獨立性的一個指標。

內聚:故名思議,表示內部間聚集、關聯的程度,那么高內聚就是指要高度的聚集和關聯。高內聚是指類與類之間的關系而定,高,意思是他們之間的關系要簡單,明了,不要有很強的關系,不然,運行起來就會出問題。一個類的運行影響到其他的類。由於高內聚具備可靠性,可重用性,可讀性等優點,模塊設計推薦采用高內聚。內聚標志一個模塊內各個元素彼此結合的緊密程度,它是信息隱蔽和局部化概念的自然擴展。內聚是從功能角度來度量模塊內的聯系,一個好的內聚模塊應當恰好做一件事。它描述的是模塊內的功能聯系。


 

內聚

偶然內聚:

  一個模塊內的各處理元素之間沒有任何聯系,只是偶然地被湊到一起。這種模塊也稱為巧合內聚,內聚程度最低。

邏輯內聚:

  這種模塊把幾種相關的功能組合在一起, 每次被調用時,由傳送給模塊參數來確定該模塊應完成哪一種功能 。

時間內聚:

  把需要同時執行的動作組合在一起形成的模塊稱為時間內聚模塊。

過程內聚:

  構件或者操作的組合方式是,允許在調用前面的構件或操作之后,馬上調用后面的構件或操作,即使兩者之間沒有數據進行傳遞。簡單的說就是如果一個模塊內的處理元素是相關的,而且必須以特定次序執行則稱為過程內聚。例如某要完成登錄的功能,前一個功能判斷網絡狀態,后一個執行登錄操作,顯然是按照特定次序執行的。

通信內聚:

  指模塊內所有處理元素都在同一個數據結構上操作或所有處理功能都通過公用數據而發生關聯(有時稱之為信息內聚)。即指模塊內各個組成部分都使用相同的數據結構或產生相同的數據結構。

順序內聚:

  一個模塊中各個處理元素和同一個功能密切相關,而且這些處理必須順序執行,通常前一個處理元素的輸出時后一個處理元素的輸入。例如某要完成獲取訂單信息的功能,前一個功能獲取用戶信息,后一個執行計算均價操作,顯然該模塊內兩部分緊密關聯。順序內聚的內聚度比較高,但缺點是不如功能內聚易於維護。

功能內聚:

  模塊內所有元素的各個組成部分全部都為完成同一個功能而存在,共同完成一個單一的功能,模塊已不可再分。即模塊僅包括為完成某個功能所必須的所有成分,這些成分緊密聯系、缺一不可。


 

耦合

非直接耦合:

  兩個模塊之間沒有直接關系,它們之間的聯系完全是通過主模塊的控制和調用來實現的。耦合度最弱,模塊獨立性最強。

數據耦合:

  調用模塊和被調用模塊之間只傳遞簡單的數據項參數。相當於高級語言中的值傳遞。

標記耦合:

  調用模塊和被調用模塊之間傳遞數據結構而不是簡單數據,同時也稱作特征耦合。表就和的模塊間傳遞的不是簡單變量,而是像高級語言中的數據名、記錄名和文件名等數據結果,這些名字即為標記,其實傳遞的是地址。

控制耦合:

  模塊之間傳遞的不是數據信息,而是控制信息例如標志、開關量等,一個模塊控制了另一個模塊的功能。

外部耦合:

  一組模塊都訪問同一全局簡單變量,而且不通過參數表傳遞該全局變量的信息,則稱之為外部耦合。

公共耦合:

  一組模塊都訪問同一個全局數據結構,則稱之為公共耦合。公共數據環境可以是全局數據結構、共享的通信區、內存的公共覆蓋區等。如果模塊只是向公共數據環境輸入數據,或是只從公共數據環境取出數據,這屬於比較松散的公共耦合;如果模塊既向公共數據環境輸入數據又從公共數據環境取出數據,這屬於較緊密的公共耦合。

公共耦合會引起以下問題:

1. 無法控制各個模塊對公共數據的存取,嚴重影響了軟件模塊的可靠性和適應性。

2. 使軟件的可維護性變差。若一個模塊修改了公共數據,則會影響相關模塊。

3. 降低了軟件的可理解性。不容易清楚知道哪些數據被哪些模塊所共享,排錯困難。

一般地,僅當模塊間共享的數據很多且通過參數傳遞很不方便時,才使用公共耦合。

內容耦合:

  一個模塊直接訪問另一模塊的內容,則稱這兩個模塊為內容耦合。

若在程序中出現下列情況之一,則說明兩個模塊之間發生了內容耦合:

1. 一個模塊直接訪問另一個模塊的內部數據。

2. 一個模塊不通過正常入口而直接轉入到另一個模塊的內部。

3. 兩個模塊有一部分代碼重疊(該部分代碼具有一定的獨立功能)。

4. 一個模塊有多個入口。

內容耦合可能在匯編語言中出現。大多數高級語言都已設計成不允許出現內容耦合。這種耦合的耦合性最強,模塊獨立性最弱。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM