探討OOP
有一個笑話:
一個人到了硅谷,發現有賣猴子的,一只1000美元,一問,原來這只猴子能寫出風格良好的C語言代碼;在旁邊還有另一只猴子,標價5000美元,那人奇怪的問老板: 它會甚麼?
老板回答: 它會寫C++代碼,面向對象的,很流行喔!
“流行”的確很誘人,我也是因為”流行”,才開始學習C++的。但是流行的並不一定就好,比如非典。
?
Koening大師有一句名言: 用類來表示概念。其實Bijarney在發明C++的時候,目的也就是讓每一個概念清晰化。
台灣人管面向對象叫: ”物件導向”,這種說法非常形象。我們的動作都是作用在某種事物(物件)上的,把這個物件連同對它的動作合併起來,就是一個”物件導向”模型。
面向對象程序開發的好處在於封裝,每一個概念和相關的操作都被”類”組合成了一個整體,類的實例是”對象”,對象之間通過消息傳遞來相互作用,而對彼此的具體實現不用關心。這樣,我們只需要關心每一個”概念”是否正確,而不用管”概念”之間出了甚麼事情。
?
面向對象的另一個好處是”組合”和”繼承”。車輪和車架兩個類組合成了車子,而摩托車繼承了自行車的所有功能還有自己的額外功能。
彼此之間配合的類可以”組合”,彼此之間有功能涵蓋關係的類可以”繼承”。這點需要尤其注意,否則就會出現一個”鴕鳥”類居然有”飛”的方法。
一只公雞抓著剛下蛋的母雞痛打,為甚麼? 因為那只母雞下了一個鴨蛋。
OOP是個雙面斧,它可以讓你更輕鬆,也可以生出許多莫名其妙的錯誤來。
?
對於科學計算以及其他面向數據的操作,OOP並沒有優勢。科學家們完全沒有必要編寫一個”高階偏微分方程”類用于科學計算。相反,如果採用FORTRAN這樣的結構化語言,則無論效率還是程序的質量,可以預期都是遠遠超過OOP語言的。
而在面向事務處理,還有Windows應用程序,OOP的優勢就很明顯了。由於OOP的封裝和可擴充性,程序具有了很好的穩定性和可維護性。
?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=79095