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