1. 功能內聚力 (Functional Cohesion)
一個模組只做一件事情,即具有唯一功能。
模組從事與問題相關的單一功能:是
Why so good:可以重用、便於維護、利於擴展
2. 順序內聚力 (Sequential Cohesion)
模組內具有多個功能,且一功能的輸出立即成為下一功能的輸入(執行順序有相關性),且共用相同的資料。
模組從事與問題相關的單一功能:否
模組內各活動的關係:共用相同資料
資料是否有序:是
3. 溝通內聚力 (Communicational Cohesion)
模組內具有多個功能,但它們的執行順序沒有相關性,且共用相同的資料。
模組從事與問題相關的單一功能:否
模組內各活動的關係:共用相同資料
資料是否有序:否
Why so bad:難以重用
4. 程序內聚力 (Procedural Cohesion)
模組內具有多個功能,這些功能必須按照一定的順序來執行,但不共用資料。
這些功能群集在一個模組內僅為了確保它們的執行順序。
模組從事與問題相關的單一功能:否
模組內各活動的關係:流程控制
流程是否有序:是
Why so bad:功能與模組間其他功能低相關卻與其他模組高相關、難以重用
How to fix:把要做的事abstract,如讓database等功能能直接處理read和update
5. 暫時內聚力 (Temporal Cohesion)
模組內具有多個功能,但它們的執行順序沒有相關性,只必須在同一時間內執行完成。
初始化(Initialize)系統、設定一組變數的初值。
模組從事與問題相關的單一功能:否
模組內各活動的關係:流程控制
流程是否有序:否
Why so bad:功能與模組間其他功能低相關卻與其他模組高相關、難以重用
How to fix:系統送initialization訊息,把初始化工作交給各個component自己做
6. 邏輯內聚力 (Logical Cohesion)
模組內具有多個邏輯上相關聯的功能。
模組的控制權操縱由上層模組所傳遞之參數來決定。
如,input可以是tape,disk或network,但要用參數決定。
模組從事與問題相關的單一功能:否
模組內各活動的關係:無關
功能邏輯是否相關:是
Why so bad:難以理解、難以重用
How to fix:將邏輯上的功能用子類別去override
7. 偶發內聚力 (Coincidental Cohesion)
一個模組內部需要執行多件工作,且每件工作都不相干
模組從事與問題相關的單一功能:否
模組內各活動的關係:無關
功能邏輯是否相關:否
Why so bad:難以維護、難以重用
How to fix:將各個功能獨立出來自成一模組,使其成為功能內聚力