內聚與耦合(一) 概要篇 | Cohesion and Coupling

2024-09-15
GRASP

對於高內聚一知半解的結果

對於高內聚一知半解的結果

情境

以下情境純屬虛構,如有雷同,實屬巧合

在某個辦公室,有以下對話

小明:我說小王,你怎麼寫出個 god class,這個耦合也太高了吧。

小王:不是,都說要追求高內聚的程式,我這不是一個高內聚的類別嗎?

小明:亂講!你這個也做太多事了吧!哪裡高內聚!

小王:我看你是不懂高內聚,高內聚就是要一個模塊可以獨立做到一件事,我這是...

通常這種對話會沒個結果,因為內聚與耦合是個模糊的東西嗎?


內聚與耦合 | Coupling And Cohesion

“ Fools rush in where angels fear to tread. ”

― Alexander Pope, An Essay on Criticism

很多時候,高內聚與低耦合會變成大家都會拿來批鬥的武器,無論是當面對決還是對離職的前輩輸出。高內聚與低耦合好像有天生神聖性,所有人都不清楚他是什麼,但它就是一個真理,所以大家都能拿出來說個幾句。

這麼說高內聚與低耦合好像只是拿來對決的武器,不能落實到實際的程式碼一樣,那還讀下去幹嘛 ? 那我先看其他文章好了。

不好把握的模糊概念或許是因為其歷史悠久,每個人都有自己的定義,那如果我們回到那個夢開始的地方呢 ?

簡史

內聚與耦合的概念由 Larry Constantine 在 1968 年提出,並在後續的 Structured Design: Fundamentals of a Discipline of Computer Program and System Design 進行進一步的衡量方式與分類。

該概念主要是針對模組化、結構化程式的一種描述。本篇也會透過這個基礎下去解釋。

分類

在書中,將內聚與耦合依照程度分成以下幾種。

內聚的分類,以下按照高內聚到低內聚排序
  • 功能內聚力 (Functional Cohesion)
  • 循序內聚力 (Sequential Cohesion)
  • 溝通內聚力 (Communication Cohesion)
  • 程序內聚力 (Procedural Cohesion)
  • 暫時內聚力 (Temporal Cohesion)
  • 邏輯內聚力 (Logical Cohesion)
  • 偶發內聚力 (Coincidental Cohesion)
耦合的分類,以下依照低耦合到高耦合排序
  • 無耦合
  • 資料耦合力 (Data Coupling)
  • 類型耦合力 (Stamp Coupling)
  • 控制耦合力 (Control Coupling)
  • 共同耦合力 (Common Coupling)
  • 內容耦合力 (Content Coupling)

作者心得

下一篇將會從內聚先做解釋,再解釋進而耦合,最後是總結與心得,總共四篇

倒數最後兩集了,真沒想到咒術迴戰倒數第三集竟然是批鬥大會,然後還是把 MVP 拖出來鞭,真是小母牛坐火箭...


參考資料

也可以看看以下文章