2014年4月20日 星期日

讀 【Why OO Sucks by Joe Armstrong】 ... 這傢伙不是真的懂物件導向(This guy don't know much about OO.)

原文出處似乎已經不可考,附上的聯結內的文章其實也不是原文。

這位Armstrong先生列出了四點「物件導向很爛的原因」。

有些我無法反駁,因為著墨不深、經驗不多,但我明顯感受到不正確的地方,就直接用力的「炮」了!

1.Data structure and functions should not be bound together.
2.Everything has to be an object.
3.In a OOPL data type definitions are spread out all over the place.
4.Objects have private state.

.......仔細看了一眼,基本上每一點都有得「炮」。

或許是因為他的觀點是集中在C++的物件導向,而不是Java的物件導向,所以他對物件導向的觀點很狹隘、想像力更是偏執。(因為跟C++工程師一起合作的經驗很多,所以對他們有這樣的偏見。)\



第一點就大錯特錯!

資料結構跟資料處理功能本來就可以分開!

There is no reason to bound the data structure and functions in one object.

不知道怎麼分開,就表示根本沒搞懂物件導向的極限!

If you don't know how to do it in different object, you don't know OO at all.



第二點...我不懂有什麼好抱怨的,可是我也不覺得對此反感有什麼「不對」。



第三點是最離譜的地方。

因為這點的好壞很主觀!

就好像C++的指標操作也引來很多人詬病一樣!但除此以外的物件導向語言(似乎)多有直接變換取直/取記憶體的功能。(在C/C++...連矩陣的操作都可以用指標亂入,某個「指標參數」的遞增並不是遞增這個指標的值,而是指「從指標01遞增到指標02」。──雖然程式碼和語法上有「特徵」,但整體結構卻沒有。)





第四點......不太懂!(難道我英文這麼差?)沒人強制設計者宣告任何private參數!

這又是個不懂OO的人會有的偏見。

private的功能和意義是避免特定資料備不受控制的修改,而不是把這個資料的型態藏起來!getter和setter就是這個概念的延伸物!

沒有留言:

張貼留言