由Template想到OOP與GP

2021-04-22 21:37:42 字數 1765 閱讀 6254

所謂的

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 這...