[Guideline] DON'T OVERCLASSIFY

看板OOAD作者 (!H45)時間17年前 (2007/11/17 18:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
_________________________ 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)
文章代碼(AID): #17Fi6_Vc (OOAD)
文章代碼(AID): #17Fi6_Vc (OOAD)