物件導向程式 低耦合、高內聚 – 內聚編 (Cohesion)

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:將各個功能獨立出來自成一模組,使其成為功能內聚力


參考文獻

  1. https://hackmd.io/@k139/r1y-9LmK4/%2Fs%2FH1x46U7KN?type=book#%E8%80%A6%E5%90%88%E5%8A%9B
  2. https://www.slideshare.net/AdilAslam4/coupling-and-cohesion-in-software-engineering
  3. https://courses.cs.washington.edu/courses/cse403/96sp/coupling-cohesion.html