[碎碎念] 程式開發領域由菜鳥到老鳥的成長歷程 (20) - 中鳥階段-高內聚,低耦合。

一定會有人覺得奇怪,為什麼到今天還在講物件導向,因為筆者認為物件導向是心法,觀念對了,寫出來的程式才會有一定的水準,而這套心法有很多東西可以講,不過筆者只會講中鳥階段應該要學會或養成的良好習慣。

高內聚,低耦合 (high cohesion、low coupling) 的意思是,物件的程式碼應該要有很高的比率只和物件內其他有關的程式碼有關聯,而對外部的程式碼,物件或元件等的關聯度要愈低愈好 (最佳的狀態是零耦合)。這樣做的用意是讓物件可以獨立的發展,而無須依賴外部的任何程式碼,如此一來,物件本身可以在不影響其他程式的情況下自由的修改與變化,而外部程式的任何修改也不會影響到物件本身的功能與運作。

說來容易,但對於寫慣了流程導向的程式師來說,可能還是有難度的,因為物件導向的訓練不夠,經驗也不足,不太容易一開始就寫出具備高內聚低耦合性質的物件,那是有點強人所難,但是如果沒有練好這心法,未來在寫程式時一樣會寫出那種 "牽一髮動全身" 的物件,不管是內部還是外部,都會影響到原本物件的行為或是功能,內部的還可以透過一些方法處理,但對外的耦合性往往會是最難處理的,尤其是如果外部程式是外購的元件,在無法動到元件的原始碼的情況下,變得物件要因為該元件是否可正常運作而有所顧忌,改起來可能會非常吃力。

高內聚,低耦合除了可以運用在程式設計上,它也可以運用在系統的設計上,在中大型規模的系統,每個子系統都有各自的功能,以往流程導向的思維就是只要做好流程,其他的特性都不管,所以才會有嚴重的相依和耦合,想改也很難改,SOA (Service Oriented Architecture) 就是為了要將各元件的職責明確切開,將耦合性降到最低,用戶端只需要透過介面去存取它即可,這樣的架構就有高內聚低耦合的影子。

所以,身為中鳥的你,還認為這心法不重要嗎?

PS: 這裡有一篇不錯的參考:
http://www.dotblogs.com.tw/hatelove/archive/2010/10/16/oo-loosely-coupling.aspx