it界有一句很著名的口號:強內聚、松耦合。
即使是最初級的程式設計師,在常常的被教導中,他也了解了這句口號的含義:我們的程式要模組化,模組要完成明確的一組關聯的服務功能,要求它的各部分是相關的、有機組合起來是完整體(外部程式來看黑盒子),模組的內部各成分之間相關聯程度要盡可能高(強內聚);而模組與模組之間又要求是可分拆的、少依賴的(松耦合)。
人們易於實現強內聚的模組,例如:乙個函式實現乙個獨立的功能,這就是強內聚。
人們不易實現松耦合,因為,孤獨的模組毫無意義,只有模組間的相互協調地工作,才能實現系統的目的。而對於模組間的相互關係的設計,沒有一定的經驗是難以把握。耦合的強度依賴於:(1)乙個模組對另乙個模組的呼叫;(2)乙個模組向另乙個模組傳遞的資料量;(3)乙個模組施加到另乙個模組的控制的多少;(4)模組之間介面的複雜程度。等等。
當然,「強內聚、松耦合」也是有矛盾的,如:內聚性越強,則要求的函式越多(每個函式只作一件「事」),這樣,將它們組合成「大」的功能,也就越複雜,就不可能達到松耦合。因此,應在二者之間作出平衡與折衷的選擇,這也體現程式設計師的水平。從系統論的角度來看,系統是有層次的,即系統可以分為子系統,模組可分為子模組,「強內聚、松耦合」的「度」的把握,應結合系統的次層性來考慮,即通常應在層次性上作出折衷,如:模組內子程式(下乙個層次上)應共享資料(有一定的耦合度),而減少全域性變數能降低子程式性間的耦合性。
「強內聚、松耦合」對於程式編寫分工、程式的可維護性以及測試都有重要的關係,如:從設計角度來看,在「強內聚、松耦合」的指導下進行的設計得到的程式模組,符合專案管理的wbs(工作分解結構)的要求,其相對獨立的模組可以分配到具體的程式設計師進行開發,另外,程式編碼外包也必須建立在這種原則的設計之下;從程式生命期角度來看,它有利於提高程式質量,特別是方便於程式的日後維護,即程式模組的相對獨立性是可維護性的保證;再從測試角度來看,符合「強內聚、松耦合」的程式,易於對區域性(模組)進行黑盒測試,也易於編寫測試用的「樁」和「驅動」。
「強內聚、松耦合」也是對組織結構的要求,專案組分為幾個小組(正式的或非正式的),各小組的工作應是高度相關的,各小組之間的工作應盡量是較少相關或有明確的介面,從而減少溝通成本。其實,「強內聚、松耦合」是系統中應遵守的普遍原則,我們在許多領域都可以找到它的應用。
「強內聚、松耦合」是我們不得不念的「三字經」,我們一定要唸好它
內聚與耦合
內聚與耦合 內聚 cohesion 是乙個模組內部各成分之間相關聯程度的度量。耦合 coupling 是模組之間依賴程度的度量。內聚和耦合是密切相關的,與其它模組存在強耦合的模組通常意味著弱內聚,而強內聚的模組通常意味著與其它模組之間存在弱耦合。模組設計追求強內聚,弱耦合。一 內聚強度 內聚按強度從...
內聚與耦合
內聚與耦合 內聚 cohesion 是乙個模組內部各成分之間相關聯程度的度量。耦合 coupling 是模組之間依賴程度的度量。內聚和耦合是密切相關的,與其它模組存在強耦合的模組通常意味著弱內聚,而強內聚的模組通常意味著與其它模組之間存在弱耦合。模組設計追求強內聚,弱耦合。一 內聚強度 內聚按強度從...
內聚與耦合
簡單地說,軟體工程中物件之間的耦合度就是物件之間的依賴性。指導使用和維護物件的主要問題是物件之間的多重依賴性。物件之間的耦合越高,維護成本越高。因此物件的設計應使類和構件之間的耦合最小。有軟硬體之間的耦合,還有軟體各模組之間的耦合。耦合性是程式結構中各個模組之間相互關聯的度量。它取決於各個模組之間的...