位置:首頁 > 高級語言 > C++教學 > C++數據抽象

C++數據抽象

數據抽象是指,隻提供必要的信息提供給外界,並隱藏其後台的細節,也就是,以表示在程序所需要的信息,而無需呈現的細節。

數據抽象是一種編程(設計)技術,它依賴於接口和實現的分離。

一個現實生活中的例子:一台電視機,可以打開和關閉,換頻道,調整音量,並添加外部組件,如揚聲器,錄像機和DVD播放器,但你不知道它的內部細節,即是,不知道它是如何在空中或通過電纜,如何轉化接收信號,並最終在屏幕上顯示出來。

因此,我們可以說,電視顯然其外部接口的分開內部實現,可以使用它的接口,如電源鍵,頻道轉換和音量控製播放,而無需了解其內部零件知識。

現在就C++編程而言,C++類提供的數據抽象很高水平。它們提供足夠的公共方法向外界的對象功能發揮和操縱對象數據,即,不用知道類如何在內部實現。

例如,程序中可以調用sort()函數不知道什麼算法函數實際使用給定值進行排序。事實上,底層實現的排序功能可以在庫版本之間切換,隻要接口保持不變,函數調用仍然可以工作。

在C++中,我們使用類來定義自己的抽象數據類型(ADT)。可以使用ostream類的cout對象流數據,以這樣的標準輸出:

#include <iostream>
using namespace std;

int main( )
{
   cout << "Hello C++" <<endl;
   return 0;
}

在這裡,不需要了解cout如何在用戶屏幕上顯示文字。隻需要知道的公共接口和cout的底層實現可自由改變。

訪問標簽強製抽象:

在C++中,我們使用訪問標簽來定義的抽象接口類。一個類可以包含零個或多個接入標簽:

  • 使用公共標簽定義的成員都可以訪問該程序的所有部分。一個類型的數據的抽象視圖是由它的公共成員來定義。

  • 使用私有標簽定義的成員無法訪問到使用類代碼。私有部分隱藏代碼,使用類型的實現。

有關於如何經常訪問的標簽可能出現冇有任何限製。每個訪問的標簽指定隨後的成員定義的訪問級彆。指定的訪問級彆一直有效,直到下一次訪問標簽遇到或類主體的關閉右括號都被認為是。

數據抽象的好處:

數據抽象提供了兩個重要的優勢:

  • 類的內部受到保護,不受無意的用戶級錯誤,這可能會損壞對象的狀態。

  • 這個類實現可能隨著時間的推移在應對不斷變化的需求或錯誤報告,而無需改變用戶級代碼。

通過定義數據成員隻在類的私有部分,該類作者可隨意更改數據。如果實現轉換,隻有類代碼需要檢查,看看有什麼影響變化可能。如果數據是公開,然後直接訪問舊表示的數據成員的任何函數可能被打破。

數據抽象例子:

在這裡實現一個類的公共和私有成員,任何C++程序是數據抽象的一個例子。考慮下麵的例子:

#include <iostream>
using namespace std;

class Adder{
   public:
      // constructor
      Adder(int i = 0)
      {
        total = i;
      }
      // interface to outside world
      void addNum(int number)
      {
          total += number;
      }
      // interface to outside world
      int getTotal()
      {
          return total;
      };
   private:
      // hidden data from outside world
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Total 60

上麵的類增加了數字相加,並返回總和的功能。公有成員addNum和getTotal是外麵世界的接口,用戶需要知道它們使用的類。私有成員總和是什麼,用戶不需要了解,隻需要類能正常工作。

設計策略:

抽象的代碼分離到接口和實現。所以在設計組件時,必須保持獨立的接口執行,這樣,如果改變底層實現,那麼接口將保持不變。

在任何程序使用接口這種情況下,它們不會受到影響,將隻需要使用最新的執行重新編譯。