gravatar

Object-Oriented Programming

我是在寫 OO 嗎?我覺得不是。如果說只是把中文辭彙換成英文,文法還是中式,你會說我在講英文嗎?寫過 MFC 或是 Cocoa 的人都可以發現,MFC 使用的是 Document/View 架構,Cocoa 是 MVC(Model-View-Controller) 的架構。舉 Safai 為例,Safari 做的是 Controller 角色,負責視窗和各種按鈕間的動作,WebKit 做的是 Document (WebDocument) 和 View (WebHTMLView) 的工作,如此組合出一個完美組合的軟體,甚至在 Safari 裡面可以有各種的 Plugin,像是 QuickTime, MediaPlayer, Acrobat PDF Reader 等等。當 user 按下 Go back 按鈕,Safari 送出 message call 給 WebView 的 goBack 後,WebView 再由他內部的 backForwardList 去得到 backItem,再由 goToItem 去回到前一頁。應該不會有人覺得一件簡單的事情,怎麼要用到那麼多層的 class?(Safari -> WebView -> WebBackForwardList),怎麼不在 Safari 這邊解決掉就好了。反正 Safari 叫 WebView 到網址就載入那個網頁和 render 出來,WebView 只要負責畫網頁不就好了?如果像這樣子,class 之間的分工清楚,各司其職,才叫做 OO 的話,那不就變成每個要用 WebKit 做 Web Browser 的都要自己寫 BackForwardList?或許在非 GUI 的領域可能可以如此,但是在 GUI 裡面,我看到的不是 Document/View 就是 MVC。如果一件事情分三個人做,叫做累贅,那把他們合在一起好了。假使今天有人叫做 Adium 要用 WebView 來呈現 RichText 訊息,那大家看到的大概會是對話框裡面有個 Safari 而不是漂亮的 Conversation format。而且 WebKit 的 Reusability 應該等於 0,因為沒辦法直接用 WebKit 來變成 customized widget。而這樣的 OO 等於是廢物。
工作上,或許來說充其量,只不過是用 C++ 寫些很像物件的東西,使用一些包成物件的東西。但是對我來說,感覺就是根本不是 OOP。我只覺得我在寫 C。