W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
數(shù)據(jù)抽象是指對外只提供基本信息并且隱藏他們的背景細節(jié),即只呈現(xiàn)程序中所需的信息而沒有提供細節(jié)。
數(shù)據(jù)抽象是一種編程(和設計)技術,依賴于接口和實現(xiàn)的分離。
讓我們舉一個現(xiàn)實生活中的例子。一個電視,你可以打開和關閉,改變頻道,調整音量,并添加外部組件,比如揚聲器,錄像機,以及 DVD 播放器。但是你不知道它的內部細節(jié),也就是說,你不知道它如何通過無線技術或者通過電纜接收信號,如何轉化信號,以及最后將信號顯示在屏幕上。
因此,我們可以說電視機實現(xiàn)了外部接口與內部實現(xiàn)的清晰分離,你可以無需知道它的內部具體實現(xiàn),就可以通過其外部接口比如電源按鈕,更換頻道,音量控制。
現(xiàn)在,如果我們談論的是 C++ 編程, C++ 類提供了大量數(shù)據(jù)抽象的例子。他們提供了大量的針對外部世界的公有函數(shù)來滿足對象的功能或者操作對象數(shù)據(jù),即外部函數(shù)不知道類在內部是如何實現(xiàn)的。
例如,你的程序可以在不知道函數(shù)實際使用什么算法來對給定的值進行排序的情況下調用 sort()
函數(shù)。事實上,排序功能的底層實現(xiàn)可以在不同版本之間變化,只要接口保持不變,你的函數(shù)調用將仍然起作用。
在 C++ 中,我們使用類來定義自己的抽象數(shù)據(jù)類型( ADT )。您可以使用類 ostream 的 cout 對象對流數(shù)據(jù)進行標準輸出如下:
#include <iostream>
using namespace std;
int main( )
{
cout << "Hello C++" <<endl;
return 0;
}
在這里,你不需要了解 cout 如何在用戶的屏幕上顯示文本。你只需要知道的公共接口和的 cout 底層實現(xiàn)是可以自由改變的。
在 C++ 中,我們使用訪問標號定義抽象接口類。一個類可以包含零個或多個訪問標簽:
一個訪問標號可以出現(xiàn)的次數(shù)通常是沒有限制的。每個訪問標號指定了隨后的成員定義的訪問級別。這個指定的訪問級別持續(xù)有效,知道遇到下一個訪問標號或看到類定義提的右花括號為止。
數(shù)據(jù)抽象提供了兩個重要的優(yōu)勢:
通過只在類的私有部分定義數(shù)據(jù)成員,類作者可以自由的對數(shù)據(jù)進行更改。如果實現(xiàn)更改,只需要檢查類的代碼看看這個改變可能造成什么影響。如果數(shù)據(jù)是公開的,那么任何可以直接訪問舊的數(shù)據(jù)成員的函數(shù)都可能遭到破壞。
任何一個用公有和私有成員實現(xiàn)一個類的 C++ 程序都是數(shù)據(jù)抽象的一個例子??紤]下面的例子:
#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;
}
編譯和執(zhí)行上面的代碼時,它產生以下結果:
Total 60
上面的類實現(xiàn)了把數(shù)字加起來,并且返回總和。公有成員 addNum 和 getTotal 是對外的接口,用戶需要知道他們才能使用的類。私有成員 total 是用戶不需要知道的,但是它是為保證程序正常運行類必要的。
抽象使代碼分離成接口和實現(xiàn)。所以在設計你的組件的時候,你必須保持接口獨立于實現(xiàn),因此,你才能做到在改變底層實現(xiàn)時,界面將保持不變。
在這種情況下,無論任何程序使用這些接口,他們不會受到影響,只需要重新編譯最新的實現(xiàn)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: