工欲善其事,必先利其器。在做一個(gè)項(xiàng)目時(shí)必定要先做好調(diào)試除錯(cuò)的預(yù)備在面向過程編程的時(shí)代都是以檢測返回的錯(cuò)誤代碼來判定錯(cuò)誤,可是這種方法的缺點(diǎn)是假如編寫某一操作的時(shí)候可能出現(xiàn)的錯(cuò)誤代碼(比如說硬件操作)太多,那么最終用戶將會(huì)陷入倒無窮無盡的檢測代碼中,可能會(huì)是這個(gè)樣子
UINT err=Functionxx(…);
if(err==xxx)
…
if(err==xxx)
…
…
…
省略100行
只有這樣程序才能在出現(xiàn)意外的時(shí)候有所相應(yīng)和恢復(fù),但是由于錯(cuò)誤處理太龐大了最終用戶很可能這樣
if(Functionxx()!=SUCEEDED)
exit(0);
這樣某些可能可以恢復(fù)的操作也無法幸免了,(比如說網(wǎng)絡(luò)連接超時(shí),終止運(yùn)行太過分了吧,只要彈出個(gè)對話框就行了)
在面向?qū)ο缶幊痰臅r(shí)候,不可否認(rèn),很多人仍然還是這樣排錯(cuò)的,其實(shí)各種面向?qū)ο蟮恼Z言都提供了異常處理的手段(比如說Object Pascal,C++,本文以C++為例)
下面是我的關(guān)于異常的一些使專心得
對于各種用戶來說,并不是每一種錯(cuò)誤都是他關(guān)心的,非凡是小組開發(fā)的時(shí)候比如某一模塊是關(guān)于文件操作的,那么編寫這個(gè)模塊的程序員只要注重關(guān)于文件操作失敗的異常就行了,而網(wǎng)絡(luò)模塊的程序員只要知道網(wǎng)絡(luò)出錯(cuò)的錯(cuò)誤處理就行了,因此,我們可以定義一個(gè)這樣的類
class CBasicException
{
CBasicException(…);
char* GetDescription();
UINT GetErrorCode();
…
};
然后再從這個(gè)類繼續(xù)幾個(gè)子類
CFileException,CNetException…
然后和具體某一類錯(cuò)誤相關(guān)的具體的異常分別從上面的類里面繼續(xù),比如文件打開失敗,空間不夠等等 可以從CFileException繼續(xù),而連接超時(shí)等等可以從CNetException繼續(xù),如此一來就將錯(cuò)誤分類了整個(gè)類層次是這樣的
CBasicException
/ \
CFileException CNetException
/ \ / \
COpenFailed … CTimeOut … 進(jìn)入討論組討論。
相關(guān)推薦:
軟考經(jīng)驗(yàn):8種方法有效幫你調(diào)節(jié)考前心理
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |