程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++必知必會(一) 數據抽象

C++必知必會(一) 數據抽象

編輯:關於C++

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

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

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

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved