閑扯C++ ——觀宇宙飛船帖有感
[導(dǎo)讀]我11年前開始用C++。但最早打工的公司(就是做CAXA電子圖板的那個)當(dāng)時用的是C。后來干單片機了,也用不上
我11年前開始用C++。但最早打工的公司(就是做CAXA電子圖板的那個)當(dāng)時用的是C。后來干單片機了,也用不上。有PC端程序,也用的是Delphi(開發(fā)速度快)。所以到今天也沒真正用C++寫過大程序。但在設(shè)計思想上,我還是一直盡量“OOD”的,所以也在C++的問題上,自覺有一點發(fā)言權(quán)。
先讓我們看看C++的兩個重要特點:
1. 適度的面向?qū)ο?/strong>。與一些比較“純粹”的OOP語言(不論是早期的Smalltalk還是新潮的Java)相比,C++中的面向?qū)ο箫@得很不完全,因為它沒有虛擬構(gòu)造函數(shù)、沒有類屬(用模板代替)、沒有動態(tài)數(shù)據(jù)類型、沒有自動內(nèi)存管理,保留了指針、全局對象和全局函數(shù),等等。這些還是從效率和實用出發(fā)的,這也是我最欣賞C++的地方:直面現(xiàn)實,不沉迷于理想主義。
2. 基于文本替換的實例化機制。C++中的模板,本質(zhì)和C語言中的宏一樣,都是文本替換,都是為了在代碼重用的同時保證效率。
所以,盡管總有人說要把C++看作全新語言,不要看作C語言的“改良”,但C++在骨子里仍然是C語言的繼承者——它繼承的是C的靈魂:實用主義,注重效率,行文簡潔優(yōu)美(教科書上總說Pascal語法優(yōu)美嚴(yán)謹(jǐn)云云)。
看來Microsoft也領(lǐng)會到了這個,也不枉它們使用C語言一場。從早期Windows的那些.h,到后來的MFC,都能反映這一點。這恐怕也是Microsoft早期的成功法寶之一。要知道,早在那個號稱“劃時代”的Windows95“橫空出世”之前很久,這地球上就已經(jīng)誕生了可以與后來的WindowsXP,至少是98相媲美的交互圖形用戶界面了。但是Microsoft卻能在PC機上照貓畫虎,所以它大獲成功(當(dāng)年也有人對PC很不屑,所以他們相對失敗了)。由此也可見,Microsoft成功的關(guān)鍵,并不在于技術(shù)本身,而在于市場頭腦,在于技術(shù)服從市場。當(dāng)然,更深層次的原因是PC行業(yè)崛起這個時代大背景。
總之,作為編程技巧和奇思妙想的范例(我統(tǒng)稱這類東西為《九陰真經(jīng)》下半部),Microsoft的代碼的確不錯。但是,如果你想成為真正的高手,而不僅僅停留在黑風(fēng)雙煞的級別,就必須從《九陰真經(jīng)》上半部,從真正的C++語言,從設(shè)計思想和體系結(jié)構(gòu)開始。
上半部的基本組成:
1. B.S.(C++的發(fā)明者)著《The C++ Programming Language》。(多霸氣的書名?。?
2. 面向?qū)ο蟮恼嬲A(chǔ)。推薦Bertrand Meyer的《Object-Oriented Software Construction:2nd Edtion》。看完這個,你就知道OOP/OOD/OOS之類到底是什么。
3. Erich Gamma等,設(shè)計模式:可復(fù)用面向?qū)ο?/strong>軟件的基礎(chǔ),機械工業(yè)出版社,2000。想知道軟件到底應(yīng)該怎么設(shè)計?看這本書就可以了。
即使只做嵌入式(特指低端嵌入式)開發(fā),上述精神財富也絕對是大有裨益的。





