有關抽象數據類型的條款

條款1

數據抽象


“類型”是一組操作,“抽象數據類型”則是一組具有某種實現在的操作。當我們在某個問題領域中識別對象時,首選考慮的問題是“可以用這個對像來做什麼”而不是“這個對象是如何實現的”。因此,如果某個問題的自然描述涉及的僱員、合同和薪水記錄,那麼用來解決該問題的編程語言就應該包含Employee、Contract和PayrollRecord類型。這樣就允許在問題領域和解決方案領域之間進行雙向、高效地轉換,用這種方式編寫的軟件才能儘量避免產生“轉換噪音”,從而達到更簡潔、更準確。

在C++這樣的通用編程語言中,不會有像Employee這樣特定於應用程序的類型,我們有更好的東西:C++爲創建複雜的抽象數據類型提供了便利。從本質上說,抽象數據類型的用途在於將編程語言擴展到一個特寫的問題領域。

C++中不存在針對抽象數據類型設計的公認方案,這方面的編程依然需要靈感和藝術才能,不過許多成功的途徑都遵循下面這組類似的步驟。

(1)爲類型選擇一個描述性的名字。如果難以爲這個類型命名,那就說明你還不知道你想要實現什麼,你需要開動腦筋。一個抽象數據類型應該表示一個單純的、有着良好定義的概念,而且爲該概念所取的名字應該是顯而易見的。


(2)列出類型所能執行的操作。定義一個抽象數據類型的依據是能用它做什麼。不要忘了初始化(構造函數)、清理(析構函數)、複製(複製操作)以及轉換(不帶explicit關鍵字修飾的單參數構造函數和轉換操作符)。要避免在實現時簡單地爲數據成員提供一串get/set(獲取/設置)操作-----那不叫數據抽象,而是懶惰且缺乏想象力的表現。


(3)爲類型設計接口。正如Scott Meyers告訴我們的那樣,一個類型應該做到“易於正確使用、難以錯誤使用”。既然抽象數據類型是對語言的擴展,那麼務必要正確地進行語言設計。你要爲類型的用戶設身處地地想一想,並且編寫一些使用類型接口的代碼。良好的接口設計除需考慮技術的威力外,心理學和情感方面的問題同樣需要加以考慮。


(4)實現類型。不要讓實現影響類型的接口。要實現類型的接口所承諾的約定。記住,在大多數情況下,對抽象數據類型的實現和改動,遠比對其接口的改動來的頻繁。
 

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章