天天看點

真的了解面向對象思維

隻是想給一些程式員說明一些簡單的道理

跳出程式設計

最近幫着負責公司的面試,招聘崗位是JAVA應用開發,可能是因為公司性質原因,無法找到好的畢業生源,但在溝通中越發的發現一個問題,那就是對于混口飯吃和做好一件事兒,差距是很大的。至少從履歷上可以看出來,凡是寫上SpingMVC和Struts之類架構的人,都是走進實作邏輯,壓根沒有跳出來思考。

我最喜歡提的問題是随意交叉對比“C、C++、JAVA、PYTHON、SQL”這幾種程式設計語言,至于SQL我是想聽到大家的看法,其實在目前的程式設計世界,他還是比較單一的語言,但是其語言定位是不好定位的,而對于JAVA,面試者都能說出其OO特性,但一旦我說把OO單獨拿出來說,幾乎沒有幾個能聊得太多,當然也有把OO和設計模式拿出來說的,但覺得還是缺乏些什麼。

我最後總結出來的結果就是我們在思考面向對象的時候,可能真的是基于某種實作來思考,在實際開發中很有效果,特别是JAVA,但是如果真的想了解面向對象思維,我覺得還是得跳出程式設計。

萬物皆對象

這句話是我在讀JAVA書以及一些部落格時候常常提到的,當你用C語言,使用連結清單實作一個猴子選大王的程式時候,如果跳進JAVA肯定不會習慣,畢竟簡單的

Int a=0 ,int a=0

之間的差別,就會變得有些複雜,倘若再加上JAVA的

equal()

函數,情況就會讓新手抓狂。但這些都是來自語言特性的,我覺得寫下萬物皆對象這句話在JAVA書中隻是說明他是一個很OO的語言。

但在我了解,“萬物皆對象”這種思維隻在說明實物和形式的重要性。對象是Object傾向于實物,所有的OOL都會提到一個執行個體化,建構子(建構函數),之是以讓我們去這樣的對待萬物就是因為,作為一個系統的上帝,你必須理清楚,你應該做一個有高度的上帝,我更傾向于程式員是宗教性上帝,而非神話性上帝。

需求分析是拿着一堆Object去理清楚他的真實Class,而作為上帝的時候,你必須去創造這個Class,是以我覺得Class作為關鍵字很重要,他就是一個分類,在系統科學中也可以叫做形式,托爾金定義了人、獸、精靈、邁雅、樹人,其實就是去給他做了一個分類,他們本應的形式是如何,至于佛羅多怎麼出身的,他為什麼做到咕噜做不到的事兒,就完全是實體的本身環境及複雜性決定(這也是早期純面向過程為什麼難以模拟元胞自動機的原因之一)。

面向對象的系統建立

這個問題的引出就是當我想和别人談談OO的時候(脫離OOL)去談,很多人去談設計模式。

正如之前提到的,如果我真的把類分完了,在整部精靈寶鑽裡面隻提到邁雅是什麼樣的,人類平時做什麼,精靈在哪裡流放,那麼整個精靈寶鑽就毫無心意,更别說創造出一個神話。當分類完了之後,索倫就是被執行個體化的一個邁雅,他開始是個才華出衆的(可能在智利、力量、靈活指派方法使得其綜合能力很高),最後随着環境以及個人的想法變成一個強大的邪惡力量,對象應該能自己生存,隻不過确定性系統裡面,可能是你安排他去幹嘛,書的設計就是這樣。

那麼整個面向對象的系統建立,就是把之前所做的劃分,變成實際運作的發生。而設計模式就是為你提供這樣的一個發生思路(經驗主義最喜歡的)。

清醒思考

或許是學校的風格不同,以及自己了解的範圍不同,有很多程式設計人總是稀裡糊塗地進行着開發,但我覺得每一個程式員都應該清清楚楚地意識到,自己在做一個怎樣的工作,一個清楚的思維能帶來的是一個更好的行業興趣。