2009年4月21日 星期二

想起OOP

無意間翻到PTT的OOAD板,看到了一些關於OOP的爭論。
起頭是討論GOD OBJECT,自然就談起了Constructor來。於是乎,一方認為Constructor只能用做建立物件初始之用,避免未來需要用到的時候又要改寫物件。另一方則認為放一些functional的code在裡面無傷大雅,畢竟需求並不到那種程度。

個人以為,OOP的目的與精神,可以化簡為一個單字:Reuse,不論是繼承、多型…都是由這個中心理念推衍出來。由這樣的觀點來看,Constructor的確不需要做多餘的事。

讓我們談的更深入一點:就一個專職於個人電腦應用軟體設計的工程師來說,一個接著一個的專案中,其實很多code都是重複再重複的。常寫程式的人一定遇過這種情況:做專案B的時候,會從專案A裡面複製一段程式碼來,改個變數名稱就可以用了。寫久之後,甚至會遇到一個專案有超過50%的code是剪剪貼貼而來,OOP正是為了解決這種事情而產生的概念。
當然,沒有任何事情是只有好沒有壞的。OOP的缺點就是包袱太重:設如你的物件可以看成是甲乙丙丁四種功能(四樣東西、四個部份…whatever)組成的,而專案A、B、C都會用到。不論你怎麼重組,設計,每個專案都不太可能用到甲乙丙丁四項的完整功能,而是這個用一部份,那個拿一點點;但你卻得為了這些部份的功能,收下一個相對來說很肥大的物件。不過這對一般應用程式來說不是問題,畢竟個人電腦進化夠快。

簡言之:為資源十分有限的系統設計程式(80%以上特製的程式都屬於這種),請別用OOP,你的生活不會因為OOP而美好。為資源充足的系統寫程式,OOP才能發揮他應有的好處,為你爭取喝杯咖啡,陪陪妻兒的時間。

沒有留言:

張貼留言