1. 程式人生 > >面向對象原則:高內聚低耦合

面向對象原則:高內聚低耦合

擴展性 影響 來看 訪問 成員 排列 功能 之一 新增

實際上,大多數框架都替我們考慮了這些問題,這就是為什麽我們在框架規範的要求下寫出的代碼更流暢(至少以前給我的感覺是這樣),言歸正傳。

高內聚、低耦合的定義:

內聚:每個模塊盡可能獨立完成自己的功能,不依賴於模塊外部的代碼。
耦合:模塊與模塊之間接口的復雜程度,模塊之間聯系越復雜耦合度越高,牽一發而動全身。
目的:使得模塊的“可重用性”、“移植性”大大增強
通常程序結構中各模塊的內聚程度越高,模塊間的耦合程度就越低

對於函數來說:

高內聚:盡可能類的每個成員方法只完成一件事(最大限度的聚合)
低耦合:減少類內部,一個成員方法調用另一個成員方法

對於類來說:

高內聚低耦合:減少類內部,對其他類的調用

對於功能塊來說:

高內聚低耦合:減少模塊之間的交互復雜度(接口數量,參數數據)

耦合的劃分,它們之間的耦合度由高到低排列如下:

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

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

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

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

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

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

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

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

耦合帶來的問題:

代碼可維護性差、理解性差、新增功能模塊繁瑣。

高內聚低耦合的優勢:

事實上,短期來看,並沒有很明顯的好處,甚至短期內會影響系統的開發進度,因為高內聚,低耦合的系統對開發設計人員提出了更高的要求。高內聚,低耦合的好處體現在系統持續發展的過程中,高內聚,低耦合的系統具有更好的重用性,維護性,擴展性,可以更高效的完成系統的維護開發,持續的支持業務的發展,而不會成為業務發展的障礙。

面向對象原則:高內聚低耦合