关于抽象这档事

抽象化在面向对象程序设计中占有非常重要的地位,我们常常在谈抽象,但抽象在面向对象的意义究竟是什么?我们又何以用简单的方式来理解抽象化的技巧?这是我在这篇文章试图想要做到的事情。


       抽象化在面向对象程序设计中占有非常重要的地位,我们常常在谈抽象,但抽象在面向对象的意义究竟是什么?我们又何以用简单的方式来理解抽象化的技巧?这是我在这篇文章试图想要做到的事情。

      在教科书上大抵会这么写:‘对象就是模拟真实世界的事物并加以抽象化。’或‘抽象就是找出关键性的特征用以描述真实世界’;好吧,对于一个面向对象程序设计的初学者来讲,这两句话大概不是这么容易理解,所以我想举一些实际的例子来类比,希望对大家有所帮助。

       抽象其实没这么可怕,基本上人脑有部分的运行方式就是抽象化的,比方你看到一只狗,不论它是长鼻子的长毛牧羊犬还是塌鼻头的北京狗、是腿长比拟陈思璇的阿富汗猎犬亦或短腿如腊肠、是黑白黄花还是斑点狗,你都看得出来它是条狗 ,如果你的精神和智力状态是落在正常范围内,通常不太可能会把波斯猫误认为狗;在常态的成人脑中狗有某种固定的形象分类,也就是说其实我们脑中对于狗的定义有一种抽象化的型态,只要符合这个型态就会判别为狗,当然,因为这个抽象化并不是如此精确的,所以偶尔可能会把小狼误以为小狗。

       地图是抽象化的另一个例子,下面这张是我从 Google Map 上快照下来的地图,这张图红框部分表示了中国台北世贸中心所在的位置,所以地图所要描述的关键性特征是中国台北世贸中心的位置在哪边,因此它不需要长出一个和真实世界一模一样的世贸中心出来,只是以平面的方式表达世贸中心旁边所接邻的路有信义路五段、庄敬路与基隆路一段,而君悦饭店恰好在它的旁边。

2013-05-31_132810

       从西方艺术来谈抽象化是另一个我所喜欢的例子,虽然其实我并不是这么懂艺术,不过这例子很有趣,拿抽象画来谈谈抽象化吧。

tumblr_m6r746Y5ZD1rntkg5o1_1280

       上面这张图是立体派大师毕加索的作品 —Portrait of Dora Maar,你眼中看到了什么样的关键性特征?

       立体派画家擅长用多角度描绘一个事物,可以看看这张图女人的脸其实是由两个角度的影象所组合而成 -- 一个是正面、另一个则是侧面,我看到的是毕加索利用这样的手法宣示这世界是一个三度空间的世界,这比起文艺复兴时代所使用的 2.5D 透视法对于三度空间的强调更为明显,所以这张画关键性特征也就是他所想表达的:这世界其实是三度空间的,而你有许多不同的角度来看待一个实体。

nude2

       接下来这张画作是超现实主义大师杜象的作品 —Nude Descending a staircase No.2 (中文译为下楼梯的裸女第二号)。

      杜象试图在说明什么?也就是这作品的关键性特征为何? 当然不会是裸女,因为压根我看不出来画作中的人物没有穿衣服;杜象利用多重的影像 (类似同一张底片重复曝光的效果) 描绘出一个裸女(?)走下楼梯的各特定时间点影像,他想表达的关键性特征是时间的概念,当他把时间摊平在一个二度空间的画布上时正如爱因斯坦所说:‘过去、现在和未来的区分只是挥之不去的幻象。’意即过去现在和未来是并存的,这世界有个三度空间与一度的时间。

       所以‘关键性特征’简而言之就是你想表达的事情,列出关键性特征就是在做抽象化,这也就是设计类的基础技巧。


原文:大专栏  关于抽象这档事


猜你喜欢

转载自www.cnblogs.com/petewell/p/11516341.html