[Guideline] DON'T OVERCLASSIFY
_________________________
DON'T OVERCLASSIFY
Separate concepts into different classes based on
behavior, not on data.
﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
※ 節錄自:Prefactoring - P.62
曾經有朋友去面試一家公司,面試員問了他一個問題:
「你怎麼決定哪些類別要做,哪些類別不需要做?」
朋友似乎是問答他:
「我都是全部包成類別!」
Oops, 這樣的回答恐怕會讓面試員不太滿意.......
因為不是所有的概念都要做成「不同的」類別
反倒是類似的概念可以藉由擁有不同屬性的相同類別來描述
所以類似的概念可以用單一類別來做
不只是如此,有些簡單的概念「不適合」做成一個類別
因為不是所有的概念都適合以類別來表示
反倒是基本型態就足夠讓設計者了解整個系統的運作模式
所以有些簡單的概念可以用基本型態來處理
舉例而言:
我手上有 500 張風景圖,300 張人物圖,700 張植物圖
一般人的直觀會把這些圖案分類為「風景圖」、「人物圖」、「植物圖」
然後把這三種圖案分別做成三個「不同的類別」
之後再做一個新類別叫作「圖片」當成這三種圖案的父類別
但是!把三種圖案分成三個「不同的類別」有什麼意義嗎?
它們的「行為」幾乎完全相同:取得像素值、設定像素值、……
那麼把它們分成三個類別不就只是徒增軟體複雜度而已?
需求文件如果沒有特別描述風景圖、人物圖、植物圖要哪些不同的操作功能
只需要一個「圖片」類別就夠了。
剛剛有提到像素值這一回事兒
有些人會把像素值做成一個類別
因為八位元的像素值只會落在 [0, 255],甚至有些標準化的數值是在 [0, 1] 區間
而且進行影像處理的時候,需要取得像素值的「紅色」、「綠色」、「藍色」
甚至有些情況還要取得它的「色調」、「飽合度」、「亮度」
這麼多的理由支持像素值應該獨立出去,建立自己的類別大國
但是!像素值是一個非常底層的概念,而且也非常地簡單
它就是一個數字,一個數字而已
有需要為了它建立這麼多的成員方法嗎?
仔細想一想,進行影像處理的時候,每次都必須先取得像素值,它也許是一個整數
如果套用像素類別,那麼圖片上的每一個像素值都會是一個物件
這意味著 256×256 的圖片就會有 256×256 個像素物件
Oops, 比起全部都用整數來儲存,這麼多的像素物件會是一個很恐怖的效能瓶頸
像素類別的小小改變,會牽動整個系統的執行效率
在這個角度來看的話,不僅每次從影像取得像素值都多了一步建構物件的麻煩
而且還嚴重地影響了系統的執行效率
這麼底層又簡單的像素概念,恐怕不太適合做成一個類別。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.13
※ 編輯: H45 來自: 140.116.247.13 (11/17 21:39)
OOAD 近期熱門文章
PTT數位生活區 即時熱門文章
-4
30