1. 程式人生 > >軟體設計之—— 高內聚低耦合

軟體設計之—— 高內聚低耦合

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 

耦合度
一、什麼是耦合度
軟體設計中通常用耦合度和內聚度作為衡量模組獨立程度的標準。劃分摸塊的一個準則就是高內聚低耦合。 耦合度
(Coupling)是對模組間關聯程度的度量。耦合的強弱取決與模組間介面的複雜性、呼叫模組的方式以及通過介面傳送資料的多少。 模

塊間的耦合度是指模組之間的依賴關係,包括控制關係、呼叫關係、資料傳遞關係。模組間聯絡越多,其耦合性越強,同時表明其獨立性越差。降低模組間的耦合度能減少模組間的影響,防止對某一模組修改所引起的“牽一髮動全身”的水波效應,保證系統設計順利進行。 內聚和耦合密切相關,同其它模組存在強耦合關係的模組常意味這弱內聚,強內聚常意味著弱耦合。
耦合度就是某模組(類)與其它模組(類)之間的關聯、感知和依賴的程度,是衡量程式碼獨立性的一個指標,也是軟體工程設計

及編碼質量評價的一個標準。耦合的強度依賴於以下幾個因素:

(1)一個模組對另一個模組的呼叫;

(2)一個模組向另一個模組傳遞的資料量;

(3)一個模組施加到另一個模組的控制的多少;

(4)模組之間介面的複雜程度。
耦合按從強到弱的順序可分為以下幾種型別:
a)非直接耦合:兩模組間沒有直接關係,之間的聯絡完全是通過主模組的控制和呼叫來實現的   

b)資料耦合:一個模組訪問另一模組,彼此間通過簡單資料引數來交換輸入、輸出資訊。這裡的簡單資料引數不同於控制引數、公共資料結構或外部變數。   

c)標記耦合:如一組模組通過引數表傳遞記錄資訊,就是標記耦合。這個記錄是某一資料結構的子結構,不是簡單變數。   

d)控制耦合:一個模組通過傳遞開關、標誌、名字等控制資訊,明顯的控制選擇另一模組的功能   

e)外部耦合:一組模組都訪問同一全域性簡單變數而不是同一全域性資料結構,而且不是通過引數傳遞該全域性變數的資訊   

f)公共耦合:一組模組都訪問同一個公共數

據環境。該公共資料環境可以是全域性資料結構、共享的通訊區、記憶體的公共覆蓋區等。   

g)內容耦合:一個模組直接修改另一個模組的資料,或直接轉入另一個模組   

內聚度是指內部各元素之間聯絡的緊密程度,模組的內聚種類通常可分為7種,按其內聚度從低

到高的次序依此為:偶然內聚、邏輯內聚、瞬時內聚、過程內聚、通訊內聚、順序內聚、功能內聚。

二、為什麼要低耦合

瞭解什麼是耦合及耦合的分類後,我想大家對為什麼要降低耦合度已經有一定的認識,並且多數開發人員也大概嚐盡了高耦合帶來的苦

頭。道理很簡單,耦合度很高的情況下,維護程式碼時修改一個地方會牽連到很多地方,如果修改時沒有理清這些耦合關係,那麼帶來的後果

可能會是災難性的,特別是對於需求變化較多以及多人協作開發維護的專案,修改一個地方會引起本來已經執行穩定的模組錯誤,嚴重時會

導致惡性迴圈,問題永遠改不完,開發和測試都在各種問題之間奔波勞累,最後導致專案延期,使用者滿意度降低,成本也增加了,這對使用者

和開發商影響都是很惡劣的,各種風險也就不言而喻了。
為了預防這些問題的發生,其中一個重要手段就是降低程式碼的耦合度。但也不可能有絕對的零耦合,比如基於J2EE程式設計那就必須和JDK

耦合,而且高耦合也不是一無是處,如果在設計前期預料到某功能後期基本不用修改,那麼即使高耦合了也關係不大。但是,在還沒有能力

設計出基本不用修改的程式碼前,還得要求以低耦合為標準。那麼怎樣才能最大限度地降低耦合度呢?下面介紹降低耦合度的幾種方法。

三、降低耦合度的方法
1、少使用類的繼承,多用介面隱藏實現的細節。 java面向物件程式設計引入介面除了支援多型外, 隱藏實現細節也是其中一個目的。
2、模組的功能化分儘可能的單一,道理也很簡單,功能單一的模組供其它模組呼叫的機會就少。(其實這是高內聚的一種說法,高內聚低

耦合一般同時出現,為了限制篇幅,我們將在以後的版期中討論)。
3、遵循一個定義只在一個地方出現。
4、少使用全域性變數。
5、類屬性和方法的宣告少用public,多用private關鍵字,
6、多用設計模式,比如採用MVC的設計模式就可以降低介面與業務邏輯的耦合度。
7、儘量不用“硬編碼”的方式寫程式,同時也儘量避免直接用SQL語句操作資料庫。
8、最後當然就是避免直接操作或呼叫其它模組或類(內容耦合);如果模組間必須存在耦合,原則上儘量使用資料耦合,少用控制耦合,

限制公共耦合的範圍,避免使用內容耦合。

內聚: 故名思議,表示內部間聚集、關聯的長度,那麼高內聚就是指要高度的聚集和關聯。
高內聚:類與類之間的關係而定,高,意思是他們之間的關係要簡單,明瞭,不要有很強的關係,不然,執行起來就會出問題。一個類的執行影響到其他的類。由於高內聚具備魯棒性,可靠性,可重用性,可讀性等優點,模組設計推薦採用高內聚。

這是軟體工程中的概念,是判斷設計好壞的標準,主要是面向OO的設計,主要是看類的內聚性是否高,偶合度是否低

“高內聚,低耦合”,首先要知道一個軟體是由多個子程式組裝而成,
而一個程式由多個模組(方法)構成!
“高內聚,低耦合”主要是闡述的面向物件系統中,各個類需要職責分離的思想。
每一個類完成特定的獨立的功能,這個就是高內聚。耦合就是類之間的互相呼叫關係,如果耦合很強,互相牽扯呼叫很多,那麼會牽一髮而動全身,不利於維護和擴充套件。
類之間的設定應該要低耦合,但是每個類應該要高內聚.耦合是類之間相互依賴的尺度.如果每個物件都有引用其它所有的物件,那麼就有高耦合,這是不合乎要求的,因為在兩個物件之間,潛在性地流動了太多資訊.低耦合是合乎要求的:它意味著物件彼此之間更獨立的工作.低耦合最小化了修改一個類而導致也要修改其它類的"連鎖反應". 內聚是一個類中變數與方法連線強度的尺度.高內聚是值得要的,因為它意味著類可以更好地執行一項工作.低內聚是不好的,因為它表明類中的元素之間很少相關.成分之間相互有關聯的模組是合乎要求的.每個方法也應該高內聚.大多數的方法只執行一個功能.不要在方法中新增'額外'的指令,這樣會導致方法執行更多的函式.

 
推廣開來說,這個思想並不限於類與類之間的關係。模組和模組,子系統之間也都要遵守這個原則,才可以設計出延展性比較強的系統。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述