內聚性(cohesion)也稱為內聚力,是一軟體度量,是指機能相關的程式組合成一模組的程度,或是各機能凝聚的狀態或程度。是結構化分析的重要概念之一。量測內聚性的方式很多,有些方法是由分析源**,得到非量化的結果,有些方法則是檢查源**的文字特徵,以得到內聚性的量化分數。內聚性是屬於順序式的量測量,一般會以「高內聚性」或「低內聚性」來表示。一般會希望程式的模組有高內聚性,因為高內聚性一般和許多理想的軟體特性有關,包括魯棒性、可靠度、可復用性及易懂性(understandability)等特性,而低內聚性一般也代表不易維護、不易測試、不易復用以及難以理解。
耦合性是乙個和內聚性相對的概念。一般而言高內聚性代表低耦合性,反之亦然。內聚性是由賴瑞·康斯坦丁所提出,是以實務上可減少維護及修改的「好」軟體的特性為基礎。
在電腦科學中,內聚性是指機能相關的程式組合成一模組的程度。應用在物件導向程式設計中,若服務特定型別的方法在許多方面都很類似,則此型別即有高內聚性。在乙個高內聚性的系統中,**可讀性及復用的可能性都會提高,程式雖然複雜,但可被管理。
以下的情形會降低程式的內聚性:
1、許多機能封裝在一型別內,可以藉由方法供外界使用,但機能彼此類似之處不多。
2、在方法中進行許多不同的機能,使用的是相關性低或不相關的資料。
低內聚性的缺點如下:
1、增加理解模組的困難度。
2、增加維護系統的困難度,因為乙個邏輯修改會影響許多模組,而乙個模組的修改會使得一些相關模組也要修改。
3、增加模組復用困難度,因為大部分的應用程式無法復用乙個由許多不一定相關的機能組成的模組。內聚性是一種非量化的量測,可利用評量規准來確認待確認源**的內聚性的分類。內聚性的分類如下,由低到高排列:
1、偶然內聚性(coincidental cohesion,最低)
偶然內聚性是指模組中的機能只是剛好放在一起,模組中各機能之間唯一的關係是其位在同乙個模組中(例如:「工具」模組)。
2、邏輯內聚性(logical cohesion)
邏輯內聚性是只要機能只要在邏輯上分為同一類,不論各機能的本質是否有很大差異,就將這些機能放在同一模組中(例如將所有的滑鼠和鍵盤都放在輸入處理副程式中)。模組內執行幾個邏輯上相似的功能,通過引數確定該模組完成哪乙個功能。
3、時間性內聚性(temporal cohesion)
時間性內聚性是指將相近時間點執行的程式,放在同乙個模組中(例如在捕捉到乙個異常後呼叫一函式,在函式中關閉已開啟的檔案、產生錯誤日誌、並告知使用者)。
4、程式內聚性(procedural cohesion)
程式內聚性是指依一組會依照固定順序執行的程式放在同乙個模組中(例如乙個函式檢查檔案的許可權,之後開啟檔案)。
5、聯絡內聚性/資訊內聚/通訊內聚(communicational cohesion)
聯絡內聚性是指模組中的機能因為處理相同的資料或者指各處理使用相同的輸入資料或者產生相同的輸出資料,因此放在同乙個模組中(例如乙個模組中的許多機能都訪問同乙個記錄)。
6、依序內聚性/順序內聚(sequential cohesion)
依序內聚性是指模組中的各機能彼此的輸入及輸出資料相關,一模組的輸出資料是另乙個模組的輸入,類似工廠的生產線(例如乙個模組先讀取檔案中的資料,之後再處理資料)。
7、功能內聚性(functional cohesion,最高)
功能內聚性是指模組中的各機能是因為它們都對模組中單一明確定義的任務有貢獻(例如xml字串的詞法分析)。
由賴瑞·康斯坦丁、愛德華·尤登及史蒂夫·麥康奈爾等人的研究[4]都提出偶然內聚性和邏輯內聚性是不好的,聯絡內聚性和依序內聚性是好的,而功能內聚性是最理想的狀態。
python學習 程式的解耦
注 如果你對python感興趣,我這有個學習python基地,裡面有很多學習資料,感興趣的 q群 688244617 import os deffile handler backend data,res none type fetch 查詢功能 iftype fetch with open test...
神秘的高內聚與低耦合舉例
1.巧合 內聚 偶然內聚 模組的各成分之間沒有關聯,只是把分散的功能合併在一起。例 a模組中有三條語句 一條賦值,一條求和,一條傳參 表面上看不出任何聯絡,但是b c模組中都用到了這三條語句,於是將這三條語句合併成了模組 a。模組 a中就是偶然內聚。2.邏輯內聚 邏輯上相關的功能被放在同一模組中。例...
架構系列 架構設計中的「反向依賴」與解耦方案
很多公司,技術經常遇到這樣的場景 1 硬體公升級,要換一台高配機器 2 網路重新規劃,若干伺服器要調整機架 3 伺服器當機,要重新部署恢復服務 由a的調整 資料庫換ip 配合修改和調整的卻是bcde 改配置重啟 bcde內心非常的鬱悶 明明換ip的是你,憑什麼配合重啟的卻是我?根本上,這是乙個 架構...