----------------------------------------------------------------------------------------------------------------
經(jīng)常看到關(guān)于OO編程的討論,C++, Java, C#...還有最近很流行的動態(tài)語言Python,Ruby等,但很少看到有C的份。
在我看來,OO編程的核心是OO的思想,用什么語言倒是其次。但是,不可否認,那些專門為OO編程設(shè)計的語言可以比較方便和自然地表達OO思想,有些語言甚至強制使用OO特性。
C,作為最貼近底層的高級語言,擁有簡潔的語法和直接內(nèi)存操作能力(指針),大量運用于系統(tǒng)級編程,如操作系統(tǒng)內(nèi)核,驅(qū)動程序等。而在嵌入式系統(tǒng)中,由于資源有限等因素,更傾向于用C編程。
C雖然在語言特性上并沒有體現(xiàn)OO特性,但是依然可以通過各種編程技巧來體現(xiàn)OO的思想。由于C的高度自由的特點,在OO編程方面還能體現(xiàn)有別于其他語言的特殊韻味。
OO思想在Unix世界中很早就有:UNIX把設(shè)備抽象成文件,這樣就可以用一套相同的方法(open, read, write, close, ... )去訪問不同的設(shè)備和文件——盡管設(shè)備之間的差異很大。用OO的觀點來看,這些“設(shè)備”對象都實現(xiàn)了"文件操作接口",可以想象有一個叫"文件"的基類,定義了"文件操作接口",“設(shè)備”對象繼承了“文件”對象....。在實現(xiàn)角度看,在內(nèi)核里面,設(shè)備驅(qū)動提供了自己的read, write等實現(xiàn),并用它們?nèi)ヌ畛湮募僮鹘Y(jié)構(gòu)體里面的函數(shù)指針....這和C++里面的虛函數(shù)運行時綁定的道理是一樣的。( C++虛函數(shù)是其實是運行時靜態(tài)綁定,而文件操作接口可以運行時動態(tài)綁定
Linux內(nèi)核中則處處體現(xiàn)了OO的思想。2.6內(nèi)核的Device Driver Modal是一套層次分明又錯綜復(fù)雜的機制,其中體現(xiàn)了許多OO設(shè)計理念。雖然可能設(shè)備驅(qū)動程序開發(fā)者覺察不到,但所有的設(shè)備驅(qū)動對象內(nèi)部都隱藏了一個叫KObject的對象。內(nèi)核把這些KObjects互相聯(lián)系在一起,并通過KObject的相互關(guān)系構(gòu)造了/sys文件系統(tǒng)。/sys就是內(nèi)核中各種設(shè)備對象的映射圖,如果把/sys全部展開,我們可以清楚地看到各種對象的關(guān)系。
實踐證明,C也可以很好地用于OO編程,而且可以用于構(gòu)造很復(fù)雜的系統(tǒng),而且C在表達OO思想的時候并不會顯得蹩腳,而是可以很簡單,很自然。
[
本帖最后由 gawk 于 2008-8-24 10:02 編輯 ]