| 一般,面向過(guò)程寫(xiě)的代碼,應(yīng)該會(huì)比較詳細(xì)的分單元文件的對(duì)吧?如果您的習(xí)慣也是如此的話(huà),那么可以按照一個(gè)單元文件的方向思考。比如,把一個(gè)具體化的、相 似的功能,寫(xiě)在一個(gè)單元文件中。然后從這個(gè)單元文件中提取成一個(gè)類(lèi)結(jié)構(gòu),用到的全局變量是類(lèi)的成員,用到的函數(shù)是類(lèi)的方法。這樣可以簡(jiǎn)單的組合成一個(gè)類(lèi)。 然后去掉這個(gè)單元文件,將類(lèi)的整體放入一個(gè)更大的單元。測(cè)試代碼從另外一個(gè)地方寫(xiě),采用直接創(chuàng)建類(lèi)對(duì)象的方式測(cè)試。如此一來(lái),您可以寫(xiě)出第一個(gè)類(lèi)對(duì)象了。 不過(guò),這樣的類(lèi)對(duì)象還不包含任何類(lèi)的優(yōu)勢(shì),主要的原因是,您目前只是把面向單元的過(guò)程代碼整理在一個(gè)類(lèi)框架下面了,并沒(méi)有使用到任何多態(tài)、繼承這兩個(gè)更重 要的要素(目前把單元文件變成類(lèi)的做法,就是封裝)。這個(gè)時(shí)候您可以仔細(xì)思考目前這個(gè)類(lèi)的架構(gòu)。比如,假設(shè)您從一個(gè)處理文件的單元文件中提取出了一個(gè) CFileStream類(lèi),那么此刻您可以往更高的抽象層次思考,首先文件流主要操作的是文件數(shù)據(jù),讀取數(shù)據(jù)到Buffer,從Buffer寫(xiě)入數(shù)據(jù)進(jìn) 去。那么這個(gè)讀寫(xiě)實(shí)際上不僅僅對(duì)文件有用,可以對(duì)內(nèi)存,對(duì)網(wǎng)絡(luò)都有用。所以從這里,您應(yīng)該可以提取出讀寫(xiě)函數(shù)的抽象行為,于是往CFileStream上 提取一個(gè)父類(lèi),只負(fù)責(zé)讀寫(xiě)的函數(shù)聲明,于是抽象的CStream就出來(lái)了。從這個(gè)父類(lèi)開(kāi)始,可以向下繼承CMemoryStream,甚至 CSocketStream等。這樣慢慢前進(jìn),您就能體會(huì)到面向?qū)ο蟮膬?yōu)勢(shì)了。 |
|
|