抽象化在物件導向程式設計中佔有非常重要的地位,我們常常在談抽象,但抽象在物件導向的意義究竟是什麼?我們又何以用簡單的方式來理解抽象化的技巧?這是我在這篇文章試圖想要做到的事情。
抽象化在物件導向程式設計中佔有非常重要的地位,我們常常在談抽象,但抽象在物件導向的意義究竟是什麼?我們又何以用簡單的方式來理解抽象化的技巧?這是我在這篇文章試圖想要做到的事情。
在教科書上大抵會這麼寫:『物件就是模擬真實世界的事物並加以抽象化。』或『抽象就是找出關鍵性的特徵用以描述真實世界』;好吧,對於一個物件導向程式設計的初學者來講,這兩句話大概不是這麼容易理解,所以我想舉一些實際的例子來類比,希望對大家有所幫助。
抽象其實沒這麼可怕,基本上人腦有部份的運作方式就是抽象化的,比方你看到一隻狗,不論它是長鼻子的長毛牧羊犬還是塌鼻頭的北京狗、是腿長比擬陳思璇的阿富汗獵犬亦或短腿如臘腸、是黑白黃花還是斑點狗,你都看得出來它是條狗 ,如果你的精神和智力狀態是落在正常範圍內,通常不太可能會把波斯貓誤認為狗;在常態的成人腦中狗有某種固定的形象分類,也就是說其實我們腦中對於狗的定義有一種抽象化的型態,只要符合這個型態就會判別為狗,當然,因為這個抽象化並不是如此精確的,所以偶爾可能會把小狼誤以為小狗。
地圖是抽象化的另一個例子,下面這張是我從 Google Map 上快照下來的地圖,這張圖紅框部份表示了台北世貿中心所在的位置,所以地圖所要描述的關鍵性特徵是台北世貿中心的位置在哪邊,因此它不需要長出一個和真實世界一模一樣的世貿中心出來,只是以平面的方式表達世貿中心旁邊所接鄰的路有信義路五段、莊敬路與基隆路一段,而君悅飯店恰好在它的旁邊。
從西方藝術來談抽象化是另一個我所喜歡的例子,雖然其實我並不是這麼懂藝術,不過這例子很有趣,拿抽象畫來談談抽象化吧。
上面這張圖是立體派大師畢卡索的作品 —Portrait of Dora Maar,你眼中看到了什麼樣的關鍵性特徵?
立體派畫家擅長用多角度描繪一個事物,可以看看這張圖女人的臉其實是由兩個角度的影象所組合而成 -- 一個是正面、另一個則是側面,我看到的是畢卡索利用這樣的手法宣示這世界是一個三度空間的世界,這比起文藝復興時代所使用的 2.5D 透視法對於三度空間的強調更為明顯,所以這張畫關鍵性特徵也就是他所想表達的:這世界其實是三度空間的,而你有許多不同的角度來看待一個物體。
接下來這張畫作是超現實主義大師杜象的作品 —Nude Descending a staircase No.2 (中文譯為下樓梯的裸女第二號)。
杜象試圖在說明什麼?也就是這作品的關鍵性特徵為何? 當然不會是裸女,因為壓根我看不出來畫作中的人物沒有穿衣服;杜象利用多重的影像 (類似同一張底片重覆曝光的效果) 描繪出一個裸女(?)走下樓梯的各特定時間點影像,他想表達的關鍵性特徵是時間的概念,當他把時間攤平在一個二度空間的畫布上時正如愛因斯坦所說:『過去、現在和未來的區分只是揮之不去的幻象。』意即過去現在和未來是並存的,這世界有個三度空間與一度的時間。
所以『關鍵性特徵』簡而言之就是你想表達的事情,列出關鍵性特徵就是在做抽象化,這也就是設計類別的基礎技巧。