所謂的
template
技術實際上和
oop並不怎麼搭界,是要歸於
gp之中的。
oop強調的是封裝性,某一屬性和操作該屬性的行為一般都會被封裝到乙個
class
中。這就好像
windows
作業系統,微軟把
api派發出來,底層的具體實現則是透明的。於我而言,
oop最為外顯的特點就是先封裝而後繼承了,所有一切的特性皆來自於此。乙個典型的
oop思想例子莫過於
mfc了。它在資料層次設計這方面而言,已經是相當巧妙而優雅的了——雖然在使用上離所見即所得的境界還相差太遠。
如果說oop是
windows
的話,那麼
gp就是
linux
了。首先,
gp中的屬性和操作該屬性的行為是分開的,不存在藏著掖著的情況;其次,乙個行為可以處理不同的屬性
(也就是資料
),這不正體現了一種分享的精神嗎?再次,以
oop中最常用的技術
virtual
機制和gp
中的templates
技術相比,無疑
templates
的執行時效率是要勝於
virtual
的——我們平時不是經常在說
linux
的效能是要好於
windows
的嗎?很容易就能
gp思想最典型最廣泛的例子就是
c++的
stl了。
在課堂上學過
c++的人都應該記得,老師一遍又一遍地強調,
c++好啊,封裝很安全,繼承很有用,
virtual
機制很神奇…而
gp的思想卻恰恰與
oop是南轅北轍的:
oop是聚合,自己的東西自己用;
gp是分離,有好東西大家一起來用。可惜許多大學的
c++課程只有
oop卻無
gp,讓許多人都覺得
oop就是
c++的全部了。其實分有分的好處,合有合的優點。分分合合本身並不重要,重要的是把握好什麼時候該分,什麼時候該合。
就我個人的體會來說,
gp是遠比
oop難學的。這裡就以
mfc和
stl為例吧。
mfc的源**有一種峰迴路轉,曲徑通幽的綿長。小時候語文課上學過一篇文章,說是有乙個名伶唱到高音處,每每旁人覺著唱不上去了,此人卻能游絲般吊著氣更上一層。看
mfc的源**時大抵就是這種感覺
(我所說的
mfc原始碼,是侯捷和孫鑫書中所用,思想是到了的)。而
stl的**乍一看就是一團亂麻,錯綜複雜;細細看進去了,才發現這團亂麻不是隨意揉弄出來了,而是有人耐著性子乙個結乙個孔地纏繞出來的,難度可想而知。而且
gp是設計模式的實現方式,若沒有工程的思想是很難領會其中妙處的。總的來說,
mfc是巧妙的,而
stl則更為精緻。
記得一年以前和一位我很尊敬的師兄討論
c++ templates
的時候,他指出
template
技術是很精妙,
gp也有很大的能量,但是普及不易。但凡真正用過
template
技術在gp
領域中寫過程式的人都會深有體會:
bug太難找了,錯誤資訊太不靠譜了,換人維護太難了。
stl能做成現在這種幾近完美的樣子,那些開發的大拿們實在是太厲害了。
前路漫漫,能人太多,吾輩還是繼續求索吧。
由PageRank想到的
首先來看看什麼是pagerank pagerank 技術 通過對由超過 50,000 萬個變數和 20 億個詞彙組成的方程進行計算,pagerank 能夠對網頁的重要性做出客觀的評價。pagerank 並不計算直接鏈結的數量,而是將從網頁 a 指向網頁 b 的鏈結解釋為由網頁 a 對網頁 b 所投的...
由Cannot find file 想到的
記錄一下 今天除錯程式,單步真機除錯,我日,程式一步一步走,盡然和程式根本就對不上號。特別奇怪。思考一下,應該是工程太多太雜,自己有不小心,讓它們混在一起打架了。於是繼續,把其它所有工程都關了,只開啟乙個,清理了所有工程。與此工程有關的直接搜尋清理,一直以來覺得沒有必要,但這次是為了保險起見。編譯工...
由VBA想到的
這段時間由於工作原因研究了一下 vba,感覺完全是如墜五里霧中,主要原因是對 atl乃至對 com技術的應用不了解。簡單說一下 vba,用過 office 系列軟體的朋友都知道它,用 vb語法來控制文件生成過程,很不錯。不只是 office,很多其它優秀軟體都有 vba模組,比如 autocad 這...