菜雞與物件導向 (8): 內聚、耦合
做為前後段落的分水嶺,這篇文章我將紀錄一下 「內聚」(Cohesion) 和 「耦合」(Coupling),這兩者是評估一個類別或元件的重要概念。
在實務上,為了提升擴展性,降低維護成本等因素,我們對於單個類別或元件,會有著 「低耦合」 及 「高內聚」 的期待。例如我們在 菜雞與物件導向 (3): 封裝 中,我們就有提到封裝的好壞相當重要,其中也包含了「提高類別內的內聚性,降低對外的耦合性」。那麼,到底什麼是內聚,什麼又是耦合呢?
內聚
「把需要的程式和資料都包裝在同一個模組內,使得該模組能夠做為一個單獨的個體執行」
白話一點說,就是就是把用到的東西都打包到一處,該有的自己都有了,所以即使單獨一個人也能完成工作的能力、可以自己 Carry 整場不用看豬隊友臉色的能力。越能自己單幹,越不需要依賴其他類別的時候,內聚力也就越高。
也就是說:如果你的類別什麼都要依賴其他類別,像小嬰兒一樣需要呵護照顧,那內聚力就很低。反之,如果像野外求生大師,啥都靠自己,那內聚力就超高。
內聚代表的是該模組的獨立性,當這個模組可以獨力完成工作,就代表我們能夠重複使用它,且不需要擔心影響到其他模組。
並且也基於這點,我們不用擔心變動這個模組時需要先處理其他的模組,因為這個工作所需的都包含在模組內了,這樣就可以單獨修改該模組,減少維護成本。
例如你的筆已經包含了所有寫字工具的條件,具有墨水跟筆芯等等,可以只使用筆就完成寫字這個工作。那麼我們就可以隨身帶著,在任何需要的時候重複使用它,而不用擔心我們會不會漏了什麼必要零件沒有帶出門。同時,如果我們需要換筆芯或墨水,我們也知道要更換的部份就在筆裡面,不需要去找鉛筆盒中別的地方。
……