2009年1月24日 星期六

看山又是山

最近把Zend Framework的文件下載後,列印出來,讀讀這些paper,Zend Framework每個物件的用法雖然不同,但背後的運作邏輯卻是相通的,這是一種思考方式的轉變,將程式設計的方式由程序導向的方式轉變為以物件導向的方式進行思考,將傳統程式設計模式以直接解決問題的思考方式,轉變為以設計出架構,將問題分類為不同的階層及架構後,再設計出適當的物件,擺在不同的架構及階層中,再將問題解決。

這種設計方式,站在程式計設師的角度來說,可是一點都不直覺,以設計電腦來做說明,為了讓電腦完成運算的功能,如果以傳統程序導向方式的思考方式,CPU、記憶體、硬碟這些東西,是完成運算的功能,就會把他們全部兜在一起,結果一台電腦中,所有的功能(CPU運算、記憶體的記憶功能、硬碟的儲存功能)就會全部混在一起,而不是分拆成不同的物件,程序導向只要單線思考,以完成功程式的功能即可,物件導向的思考方式就不同,必須將電腦折成CPU、記憶體、硬碟等物件,還要考慮這些物件怎麼連接,如何組合這些物件一起運作,除了要完成必要的功能,還要設計出一套能夠運作的架構,如CPU怎麼與主機板連接,怎麼與記憶體做協同運算。

物件導向的思維邏輯,在於建立一套問題解決的架構,讓經驗可以被重複應用,而不是重複相同的程式編碼作業,就像電腦的設計一樣,將CPU、記憶體、硬碟分拆成不同的元件後,這套元件化的設計階層架構就可以被重複使用,不論CPU的速度是怎麼加快,記憶體的容量如何增長,電腦元件組合的階層架構還是不變的,這就是物件導向的思維方式,從實務經驗建立問題解決的架構。

剛接觸物件導向時,由於只接觸概念部份,認為這真是直覺的方式,只要把程式分拆成一個個的元件,就可以完成程式設計,是非常容易的,就像初學畫的人要畫山一樣,只不過是畫一座山嘛!畫出那座山就好了,這應該就是看山是山的階段。

等到實際撰寫程式碼,這跟傳統程式導向的方式大不相同,變得很複雜,為什麼不直接把功能做出來就好了,為什麼繞了一大圈解決問題,這就跟學畫當中的人心境相同,不過是畫一座山嘛!為什麼還有那麼多的畫法及理論。這是看山不是山的階段,滿腦子想的都是一些技巧及注意事項。

比較熟悉物件導向的思考方式及程式撰寫風格後,會發現世界是那麼的美好,一個個的元件排列組合後就能完成各種程式的功能,這種方式比起傳統的開發方式,架構的彈性及威力不能相比。這就類似技巧比較成熟的畫家,要畫山時,只會想到山的美好,會想表現出山在自己心中的感覺,這就是看山又是山的階段吧!

沒有留言: