台灣最大程式設計社群網站
線上人數
1538
 
會員總數:245468
討論主題:189226
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 搞懂耦合力與內聚力,紮穩物件導向設計的馬步。
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
搞懂耦合力與內聚力,紮穩物件導向設計的馬步。
價值 : 0 QP  點閱數:530 回應數:0

樓主

Terence
門外漢
0 8
52 0
發送站內信

出處:搞懂耦合力與內聚力,紮穩物件導向設計的馬步。

在物件導向的設計的實務上,最困難的工作之一就是「如何決定物件的責任以及物件之間的關係」。

我們可以由兩個不同的觀點來解釋這句話:從抽象的觀點來看,物件的責任分配應該易於理解與合理,不讓人困惑,並且讓物件之間的運作盡量不會互相干擾;從實做的觀點來看,讓物件之間相依性降到最低,不會因為特定物件的變更而引起了整個架構的漣漪,確保設計擴充上的彈性。

現代社會由於工作繁忙,所以許多上班族都成了外食族,但是在筆者還小的時候,全家人都會回家吃晚飯。到了晚上,爸爸的責任是在家翹著二郎腿看報紙。哥哥跟我的責任則是好好讀書,長大以後要成大事立大業,光宗耀祖,讓媽媽有面子。媽媽的責任是負責煮菜,晚上全家人吃晚餐時有一頓美味的餐點可以大快朵頤。每個人都有自己要負責的工作,彼此分工合作支撐起這個美滿家庭。

如果爸爸沒有報紙看的話,爸爸一個人會覺得無聊,但是對我們沒有影響。哥哥如果期中考沒考好的話,媽媽會覺得沒面子,但是我跟爸爸覺得沒關係,反正勝敗乃兵家常事。

但是晚上的時候每個人都要「吃飯」,而飯菜是靠媽媽「煮菜」得到的,所以每個人如果要吃飽,要依靠媽媽煮菜這件工作能夠順利完成,有一天媽媽生病了,結果全家人都餓到雙腿發軟,我們全家才體認到一個事實,媽媽能不能好好煮菜這件事情會影響到全家人,所以我們必須不惜一切讓媽媽可以每晚好好的「煮菜」。

要活下去就要吃飯是一件不可違逆的事情,就好像在軟體系統內,希望物件之間完全沒有關連是不可能的,所以當我們發現大部分的物件都需要相依於某幾項特定物件的工作時,我們唯一能做的,就是盡全力讓這幾個重要物件的介面能夠保持穩定,而實做的方式就是善用介面讓物件的相依性與實體類別脫勾。

回到我美滿的家庭,既然一定要人煮飯,如果媽媽生病了沒辦法煮飯時,一定要有人能夠替代媽媽把飯菜煮好,可能是請庸人煮(可是請不起庸人),也可以叫外賣讓餐廳的廚師來煮。

從實做的觀點來看,我們讓煮飯這件事情成為一個抽象介面,在正常的狀況下,我們讓媽媽負責實作它,但是一旦媽媽不能煮飯了,外面餐廳的廚師也可以實作煮飯的介面來幫我們準備好飯菜。這樣一來我們全家人就能從此過著幸福快樂美滿的日子了。

當然也可以讓我們全家人都學習如何煮菜,但是這樣一來大家都會搞的很累,而且平常白天要上班跟上課,根本沒辦法來得及晚上趕回家煮菜,媽媽也說不定會開始耍賴叫我們負責煮菜,自己卻跑去SHOPPING。這樣就違背了中國五千年文化說分工合作團結力量大的道理。

撇開物件導向設計的高深理論,上面所談論的觀念其實是最基本的馬步功夫,盡量讓物件之間的工作能夠彼此脫勾,不會互相影響,這就叫做降低物件之間的耦合力。每個物件之間有各自負責的工作,各司其職,彼此合作下達成整體的目標,這樣就叫做提高物件的內聚力。

物件導向設計時不見得一定要應用什麼複雜的Patterns,但是卻一定要堅守物件導向設計這兩個基本原則,事實上,任何Patterns的出發點也都是為了能夠符合這兩個基本原則,讓設計盡善盡美。


搜尋相關Tags的文章: [ 物件導向設計 ] , [ 耦合力 ] , [ 內聚力 ] ,
本篇文章發表於2006-03-16 10:42
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.