看板 Soft_Job 關於我們 聯絡資訊
※ 引述《zanyking (遙遠的旅人)》之銘言: : 有人說:『不懂OO,你開發不出夠複雜的應用系統。』 對這句總有些不理解. 因為根據個人經驗,學Java的確在OO方面都學過了, 但是常有人互問:"你懂不懂OO?" 那怎樣該叫做懂OO了,這我真不懂. 然後我看了 "Coders at Work" 這本訪談集,直接看了 Joe Armstrong 那一段. (目前 Armstrong 對我來說算是神了,僅次於 Knuth 跟 von Neumann.) 他談到,就是OO派的語言,反而讓人不容易重用東西. 例如,如果你想要香蕉,OO是給你一整座森林以及一隻猩猩抓了一根香蕉給你. 反而像函數語言是一個小動作,一個小函數,就讓你得到一根香蕉. 然後他說,所謂 reusability, 以Erlang來說,可以把一段程式直接複製貼上, 就做到程式碼重覆使用了. 但是像Java呢,要修改元件或加入一些新東西,就要去看元件內許多變數和物件的狀態. 這段話,我仔細想想,嗯,對耶,現有的OO二大派系.net跟Java,是不是給人太多東西了? 有人OO了半天,卻是只在寫程式的過程中做一番自我琢磨,想東想西的舉動, 程式的結果沒差多少. reusing frequency 沒差多少. 但是,這樣的效果就是,很多人都會執著於 "某某語言支援不支援OO" 這樣問題. 不過,我想OO是個精神與執行方式,想懂OO可以讀Design Patterns,可以讀OO Theory, 但不必區別什麼語言是OO而什麼語言不是OO. 另外,可特別提的是,不是特地挑了某一類語言之後,別的東西就可以不用了. 以 Joe Armstrong 本人為例,1950年代開始在大學寫打孔卡片程式, 那卡片是一遇到錯誤就停下來,之後的程式不會讀下去. 當時他可是練到可以打了卡片餵進機器,就直接輸出成果. 而程式語言只有 Fortran 可用,沒別的選擇. 而且,他幫人debug很多程式,並注意到為什麼有人會寫一些比較不好的寫法. 因為這一些早年的經驗,他就有Erlang那種程式設計方式的哲學. 反觀現在許多人是以程式語言特徵與經驗介定他對天下百類千類的認知, 這想法是狹礙的. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.64.46 ※ 編輯: yauhh 來自: 61.231.64.46 (03/12 05:43)
andymai:我不知道Erlang是怎樣的語言~但是就"程式碼複製貼上"來說 03/12 07:07
andymai:這只適用在那種天塌下來打死不變的東西~對現今很多使用者 03/12 07:08
andymai:和他們要的功能來說~這樣Copy貼等於是拿石頭砸自己的腳~需 03/12 07:09
andymai:求異動不說~很多時候使用者想動態增、刪、修某些執行順序 03/12 07:11
andymai:~依照Design Pattern去設計模組才有辦法解決問題 03/12 07:12
jackyu:這就根有人問你"你英文好不好"是一樣的道理 03/12 07:16
jackyu:OO是分析的和設計的概念, 這個本來就只求人品, 慧根和離散 03/12 07:17
jackyu:像我連寫C都可以顧到OO概念, 只是多繞一些方式實作罷了 03/12 07:19
jackyu:給你一個problem, 你系統設計的夠不夠OO?這不是寫寫OO語言 03/12 07:21
jackyu:就能講"我對OO很熟".說實在我的OO課本講一堆自動機和數學 03/12 07:22
remmurds:這篇從頭到尾都以reusability來看OO 可是卻隻字未提OO的 03/12 07:40
remmurds:abstraction、polymorphism和encapsulation 03/12 07:41
yauhh:我想他所指的複製貼上是指程式貼上就能動,而不是懶得寫而已 03/12 07:55
yauhh:另外回樓上,你不用檢討我這一篇,因為我並沒有要談OO是什麼呀 03/12 07:56
yauhh:我要談的是我讀這一段訪談的心得. 03/12 07:57
yauhh:此外你可以提到這三點,但這三點合起來叫什麼? Reusability! 03/12 07:58
yauhh:因為你問許多人知不知道polymorphism,他會說,這有必要強調嗎 03/12 07:59
yauhh:你問abstraction,那我們早就是到處都abstraction了! 03/12 08:00
yauhh:這些底層的小項目並不是重點.重點是,你要OO是要幹嘛的? 03/12 08:00
yauhh:並且我遇到有人講OO都會覺得有點火大,你只是丟下二個o音節, 03/12 08:10
yauhh:然後其他就一概不談. 你要說你特別會OO嗎? 沒有啊,大家都會. 03/12 08:11
yauhh:大家都會的一個東西,為什麼要特別定為一個詞並且強調? 03/12 08:12
yauhh:這是我不懂的地方. 事實很明顯,你用OO,可是你沒有充份重用.. 03/12 08:12
yauhh:你用OO,可是別人非OO的該封裝也封裝,你用OO也是普通的封裝. 03/12 08:13
yauhh:你用OO,可是別人非OO也照樣抽象化. 你說你是OO,可是別人也照 03/12 08:14
yauhh:樣多型. 那你OO到底是幹什麼的呀? 03/12 08:14
yauhh:你說我不懂,但很抱歉,我懂,只是沒特別談OO而已. 03/12 08:15
yauhh:你懂不懂?我的疑問就是,標榜自己是OO其實可能沒有非常OO. 03/12 08:16
yauhh:這世界就是這麼奇怪. 03/12 08:16
DBoyX:erlang 的覆用性.. 指的應該是函式吧 03/12 08:51
DBoyX:erlang 有傳入數的設計,所以同樣名子可以是不同的函數 03/12 08:52
DBoyX:和 c++ 蠻像的,只是一個是類別一個是數量 03/12 08:53
rofellosx:那非OO派語言概念是甚麼? 只給森林跟路標 自己找香蕉? 03/12 09:02
ledia:我以為 erlang 的貼上就能用指的是 hot update ... XD 03/12 09:22
TonyQ:我也覺得對解決問題只提「學OO」或講問題只提「OO」很火大, 03/12 09:29
TonyQ:因為本質上他就是在神化OO , 一般我們用術語是用來快速表達 03/12 09:29
TonyQ:某個我們都有共識的問題,這就好像說用ajax寫網站,用OO寫程 03/12 09:29
TonyQ:式,完全都沒表達到「寫什麼」跟「怎麼寫」這兩個寫網站/程 03/12 09:30
TonyQ:式真正重要需要瞭解的事情。 03/12 09:30
hif:好比面試時說會Java, 就好像會OO一樣的無奈:( 但很好找工作 :) 03/12 10:05