close
轉錄自
http://www.cmlab.csie.ntu.edu.tw/~feitian/Object.html




在此我想談談“物件導向”,首先我先引用傳徵出版的“世紀末軟體革命”
一書的一段話:「但是就如同我們的民主制度一樣,物件導向程式設計並不一定是終極的程式設計方法。
只是現在,我們沒有更好的選擇。」作為我文章的開始。到底物件導向提供了怎樣的好處叫我從大一就對此樂此不疲呢?
首先先來看看傳統程式設計方法出了什麼問題?什麼叫傳統的程式設計方法?
那就是我們常常掛在嘴角的程序導向結構化分析方法(由von Numann提出),也就是在許多年以前號稱能解決所有電腦問題的分析工具。
是的,在“當時”他真的能解決“當時”的許多問題。然而,伴隨著世界快速變遷的腳步,人們對軟體的要求也一再地改變。
演變至今,軟體已經趨向於更複雜、更龐大的腳步在走。原因無它,其實就是人們對軟體的胃口已經變大。
猶記得我國中三年級時開始流行的Lotus 123試算表。簡簡單單的文字介面,深深的討當時的人們的歡喜,
讓許多上班族一窩蜂的學習。但現在,很明顯的已經不能滿足現在人們的需求。大家現在都在使用有GUI介面,
又能與其他資料庫相連,能圖文並茂,有具有能鑲入其他OLE2功能的MS Excel了。在這種趨勢下,
傳統的程序導向結構化分析法已不能滿足目前軟體工程高淘汰率的市場傾向。在軟體愈來愈複雜龐大之下,
程序導向結構化分析出現了許許多多的問題。除了開發速度太慢的一項原因,還有在維護以及除錯方面都是一項叫人頭痛的問題。
軟體發展因而受到許多的限制。軟體開發的速度遠遠不及硬體的開發速度。是的,這就是當年號稱的“軟體危機”。
然而,新的理論的出現總是叫已習慣舊體制的人的抗拒;他們總認為傳統的方法依舊能解決層出不窮的新問題,
而反抗去使用新的分析方法及技術。這當然不能怪他們,因為許多新事物在商業的包裝下總是被美化的有些誇張。
現在的革命一詞在人們眼中早被貶化的有些像新產品發售般的不值,像前些年剛剛被“炒”熱的WWW號稱能改變這世界人們活動的方式體制。
然而,WWW現在也被許多的專題中拿來重新檢討;討論大家是不是都熱昏了頭了,興奮過度了(!?)。物件導向亦是如此!
記得物件剛剛成為商場上炙手可熱的東西時,有許許多多的產品,號稱他的產品有多OO。
許多人看到OO就理所當然認為這產品比較好(?!)。其實,這亦是興奮過度。難怪當時有人為了諷刺那時候的物件風潮,
而在網路上貼出“售OO貓”的佈告。沒想到物件導向衝擊下的怪現象就此廣被討論,貓竟成了物件的代名詞!
著名的“十七種將貓放進堆疊的方法”的一篇論文其實就是在說如何的將物件塞進堆疊的十七種技巧。

那麼,WWW和OO是否就真的那麼不值得研究。這答案當然是否定的,就誠如你所見的,WWW依然是個熱門的東西。
而OO,也早就成為現在資訊界的龍頭老大,專為物件導向討論的講座及書刊雜誌亦跟著熱絡起來。至今依舊沒有消退的傾向。
所以,我們不能只因為他們擁有濃厚的商業氣息而否定了他們存在的意義。身為這物件時代衝擊下的我們是不是更應該去思索:
物件導向為什麼帶給資訊界如此大的衝擊?事實上,從傳統程序導向演變至物件導向,這已是個劃時代的革命。什麼叫革命?
就是推翻破壞舊有的體制,迎接新時代的來臨,我們不能用舊有的方法及觀念,去為這個新的時代做規畫。
新的時代,要有新的作為、要用新的方法;新新人類,該有更大的膽識及作風,去接受更新的挑戰。

那麼,你可能要問我:什麼叫做物件導向?呵…這絕對不是三言兩語能夠解釋的清楚的。
根據保守的估計(這當然不是我估計的),一個觀念成熟的物件導向程式設計師至少要一年的訓練,
才能貫徹物件導向的精髓。這裡說的,只是觀念的釐清而已,就得花一年的工夫了。還未提及程式語言的訓練呢!
不過你也別灰心的太早,目前許多號稱擁有絕對物件結構並且能快速而又有效率的開發程式的語言也開始因應而生了。
像是Delphi、Visual Age…等等許多程式語言都是。他們擁有一個特性,
就是能讓你以飛快的速度去建立你以前要寫的頭破血流才能完成的程式。在物件封裝的性質下,
遊戲式的建立應用程式不再是人們的夢想。甚至是不懂物件導向的人,一樣可以“拖拖拉拉”的快速建立你的應用程式。
Visual Age甚至號稱:不用你寫一行程式,你也可以完成一些基本的應用程式。哇!酷吧!不過再次的提醒你,
切莫在高空築牆。即使如此,你最好依舊能瞭解物件的精神再去學這些高階的程式語言。一知半解是非常非常危險的事情。

好像扯得太遠了,到底什麼叫做物件導向呢?事實上,它並不是一個新的語言或是一個新的語法,
而是一個新的觀點。提供我們用新的想法去看待原先的問題。而支援物件導向的語言只是提供給我們一個方便管理物件的語法而已。
事實上,只要你有物件的觀念,你也可以用傳統的程式語言寫出物件導向的程式;
也就是說,物件導向其實是一種新的規畫程式的方法。那麼物件導向與傳統程式設計規畫的方法有什麼不同呢?
以傳統程序導向而言,程式的規畫是以功能(function)來劃分的。首先,先將你變身為電腦,
以你的頭腦模擬想像程式如流水般跑下來時需要用到的功能。
以非常不人性化的要你一個活生生的人類變的像電腦一般死板板的思考方式一行行去trace程式,trace到你頭昏腦脹,依舊找不程式Bug的所在。

物件導向則是相反,他用人們自然看待問題的方式去分析問題;將我們問題中的個體,利用物件導向的特性,
把其所有的個體資料及操作的程序一個個的封裝起來,成為一個個的物件。而我們的思考重心,便放物件彼此的關係上,
利用訊息(message)的傳遞做溝通。就好像們日常生活一樣,大家都是一個個的個體,而我們其實會去注意的,
就是大夥之間的關係、老師與學生的關係、學校與學生的關系…等等。這是非常自然的,而不是要我們人類去屈就電腦的死板思考模式。
所以我們可以這麼說,“物件導向的概念是一種我們人類自然觀察世界的思維方式。”

然而,奇特的事情發生了。原本應叫人類能很愉悅接受的物件導向,卻對資訊者帶來不小的煩惱;他們覺得物件導向很奇怪、
很難理解(?!)。反而是從來沒學過電腦程式者會覺得物件導向很容易直覺、很容易接受。這是由於在軟體設計中原本被視為理所當然的概念,
透過物件的觀察方法的話,其分析結果可能大大的不同。這使得原本許多資深的程式設計師一下子得了“物件導向症候群”。
那就是“大家都說物件導向很好,但我就是有看沒有懂”。因此使得一個原本資深的程式設計師,
需比一個新學電腦者還必須花更多的時間去釐清他的觀念。如果他貿然以一點點物件導向摻入先前程式內的話,
那是比完全沒物件導向還糟糕可怕的事情,難怪物件導向會這麼不討好一些人。

說了這麼多,你也將發現系上對物件導向的教學是非常不夠的(其實是完全沒有)。我曾與教授討論過這件事情,
但目前尚無法在系上開這類課程,所以非常的建議大夥們能夠到外系去修這類課。目前資管的課程關於物件導向倒還蠻豐富的,
從大一的計概就有物件的影子在。大二後的程式語言的課那更是物件的天下。不過令我驚訝的是,雖然資管物件的相關課程很多,
但他們的學生卻有很多對物件導向的精神一知半解、或是根本不瞭解。這是很危險的一件事情(我強調很多次了)。
如果他們沒有用物件導向去深入架構核心那倒還好,否則的話,一個專案幾乎是岌岌可危。

一不小心說了太多,感謝大家這麼有耐心的看完。物件導向曾帶給我許多的好處,解決了我不少的問題。
其中最令我受惠的,就是物件導向的網狀架構及動態連結。這使得我的工作能事半功倍,程式功力提升了一甲子。
想想我接觸及學習物件導向已經兩年多了,觀念的釐清是花我最多功夫的地方。我大概花了一年半才大澈大悟,
這比外面估計的一年還多出一半。這可能是我資質愚頓的原因,或者是我接觸程序導向太久,一時腦筋轉不過來吧!如果你問我:
花了這麼多時間就只為了釐清觀念值得嗎?我大聲的告訴你:值得!因為你現在不去釐清,未來工作上也勢必要去花更多的精神釐清。
你能放棄一個登峰造極的機會嗎? 未來(現在)的資訊體制,失去了物件導向,就失去了競爭能力,你問我值得嗎?當然值得!

最近一口氣看了五、六本Visual C++的書,發現自己的物件導向功力一開始好像沒有什麼用途,在MFC的包裝之下,
Visual C++的程式看來都有一點古怪,尤其是那些奇怪的巨集,使程式看來十分不自然,為此我還去買了侯俊傑的『深入淺出MFC』,
才解決了這個困咎,不過我自己深深的知道,學習Visual C++的道路還十分遙遠的很呢,在此也鼓勵自己還有任何學習物件導向的人一下,
希望大家在學習的路上都不孤單。


Fei-tian 於大三




***************
先把文COPY起來
以免未來連結消失 @@
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 eecrazy 的頭像
    eecrazy

    eecrazy

    eecrazy 發表在 痞客邦 留言(0) 人氣()