c++必知必會之:數(shù)據(jù)抽象
本文關(guān)鍵詞:C++必知必會,由筆耕文化傳播整理發(fā)布。
c++必知必會之:數(shù)據(jù)抽象 2006-08-08 13:28:45
分類: C/C++
條款1:
數(shù)據(jù)抽象
”類型“是一組操作,“抽象數(shù)據(jù)類型”則是一組具有某種實(shí)現(xiàn)的操作。當(dāng)我們在
某個問題領(lǐng)域中識別對象時,首先考慮的問題是“可以用這個對象來做什么”而不是“這
個對象是如何實(shí)現(xiàn)的“。因此,如果某個問題的自然描述涉及到雇員、合同和薪水紀(jì)錄,
那么用來解決該問題的編程語言就應(yīng)該包含Employee,Contract和PayrollRecord類型。
這樣就允許再問題領(lǐng)域和解決方案領(lǐng)域之間進(jìn)行雙向、高效的轉(zhuǎn)換,用這種方式編寫的
軟件才能盡量避免產(chǎn)生"轉(zhuǎn)換噪音",從而達(dá)到更簡潔、更準(zhǔn)確。
在C++這樣的通用編程語言中,不會有像Employee這樣特定于應(yīng)用程序的類型,我
們有更好的東西:C++為創(chuàng)建復(fù)雜的抽象數(shù)據(jù)類型提供了便利。從本質(zhì)上說,抽象數(shù)據(jù)
類型的用途在于將變成語言擴(kuò)展到一個特定的問題領(lǐng)域。
C++中不存在針對抽象數(shù)據(jù)類型的公認(rèn)方案,這方面的編程依然需要靈感和藝術(shù)才
能,不過許多成功的途徑都遵循下面這組類似的步驟。
(1)為類型選擇一個描述性的名字。如果難給這個類型命名,那就說明你不知道你
想要實(shí)現(xiàn)什么,你需要多開動腦筋。一個抽象數(shù)據(jù)類型應(yīng)該表是一個單純的,有著良好
定義的概念,而且為該概念所取得名字應(yīng)該是顯而易見的。
(2)列出類型所能執(zhí)行的操作。定義一個抽象數(shù)據(jù)類型的依據(jù)是==〉能用他做什么。
不要忘記了初始化(構(gòu)造函數(shù))、清理(析構(gòu)函數(shù)),復(fù)制(賦值運(yùn)算符、拷貝構(gòu)造函數(shù))以及
轉(zhuǎn)換(不帶explicit關(guān)鍵字修飾的單參數(shù)構(gòu)造函數(shù)和轉(zhuǎn)換操作符)。要避免在實(shí)現(xiàn)時簡單
的為數(shù)據(jù)成員提供一串get/set操作---那不叫數(shù)據(jù)抽象,而是懶惰并且缺乏想象力的表現(xiàn)。
(3)為類型設(shè)計接口。正如Sotty Meyers告訴我們的那樣,一個類型應(yīng)該做到"易于
正確使用、難以錯誤使用“,既然抽象數(shù)據(jù)類型是對語言的擴(kuò)展,那么務(wù)必要正確的進(jìn)行
語言設(shè)計。你要為類型的用戶設(shè)身處地的想想,并且編寫一些使用類型街口的代碼。良好
的借口設(shè)計除須考慮技術(shù)的威力外,心理學(xué)和情感方面的問題同樣的需要考慮。
(4)實(shí)現(xiàn)類型。不要讓實(shí)現(xiàn)影響類型的借口。要實(shí)現(xiàn)類型的接口所承諾的約定。記住,
在大多數(shù)情況下,對數(shù)據(jù)類型的實(shí)現(xiàn)的改動,遠(yuǎn)比對其接口的改動來的頻繁。
閱讀(87130) | 評論(0) | 轉(zhuǎn)發(fā)(0) |
0
上一篇:續(xù)fcntl()之F_SETFD,F_GETFD
下一篇:C++必知必會之:多態(tài)
相關(guān)熱門文章
本文關(guān)鍵詞:C++必知必會,,由筆耕文化傳播整理發(fā)布。
本文編號:139445
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/139445.html