[概念] 增加凝聚力

看板OOAD作者 (!H45)時間15年前 (2009/03/07 18:42), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
同樣的東西擺在一起,能夠使系統更容易瞭解與修改。增加凝聚力正是做這樣的事情。 如果一個系統的凝聚力很高,那麼其中一個功能的需求變更時,只要在附近幾個地方修 改程式即可。不需要整個系統全部重新評估與規劃,大大地節省系統維護的成本。 增加凝聚力可以提升系統的維護性,以下由強到弱依序列出凝聚力的種類: 1. Functional cohesion 說明:輸入參數,回傳一個值,不做其他事。永遠試圖達成此種凝聚力。 好處:沒有任何邊際效應。 (immutable) 指引:刪除所有 mutable 行為,也移除存取參數以外的變數。 2. Layer cohesion 說明:同層的類別放在一起。最大地達成此種凝聚力。 好處:系統設計的 Common Sense。 指引:區分出高層類別與低層類別 (這邊針對「層」做說明。高層可以呼叫低層的功能,但是低層不能呼叫高層的功能) (舉例而言:應用程式可以呼叫作業系統的功能,但是作業系統不能呼叫應用程式的功能) 3. Communicational cohesion 說明:同一資料的處理邏輯都放置於同一類別。儘量達成此種凝聚力。 好處:當您想要修改資料的時候,只需要在同一個地方尋找程式碼。 指引:不要在多個不同的地方處理相同的資料。處理相同資料的程式邏輯全部移動到同 一地方。 4. Sequential cohesion 說明:一連串的程序放在一起。在不違反前三條的情況下,達成此種凝聚力。 好處:當您想要修改某個連續動作時,只需要在同一個地方尋找程式碼。 指引:找出程序的運作流程,若此地的輸出馬上是下一個地方的輸入,下一個地方的輸 出即將是下下個地方的輸入,那麼請將這些程式邏輯集中在同一個地方。 5. Procedural cohesion 說明:連續的程序放在一起。不要在犧牲前四條的情況下勉強達成此種凝聚力。 好處:當您想要修改某個使用案例的程序時,只需要在同一個地方尋找程式碼。 指引:找出使用案例,落於相同使用案例的程序放在一起。其他使用案例的程序放到一旁 6. Temporal cohesion 說明:相同時間或時機點執行的運算放在一起。比上一種凝聚力更弱。 好處:當您想要修改某個時間點執行的運算時,只需要在同一個地方尋找程式碼。 指引:找出系統啟動或初始化會執行的所有程序,把他們放在一起。找出系統關閉或終止 會觸發的所有程序,把他們放在一起。 7. Utility cohesion 說明:收集那些無法分類在其他地方的類別。此凝聚力最弱。 好處:當您需要新增常用的功能時,只要在同一個地方新增程式碼。 指引:找出各個類別常用的功能,這通常會是數學的運算式或是型別的轉換。 -- 本看板好涼 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.247.13

03/07 18:42, , 1F
喔!補充一下, wikipedia 的資料和本篇不盡相同唷!
03/07 18:42, 1F

03/13 02:08, , 2F
好想看看有沒有程式碼的範例
03/13 02:08, 2F
文章代碼(AID): #19ia-4p_ (OOAD)
文章代碼(AID): #19ia-4p_ (OOAD)