数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。ios
数据抽象是一种依赖于接口和实现分离的编程(设计)技术。算法
C/C++的学习裙【七一二 二八四 七零五 】,不管你是小白仍是进阶者,是想转行仍是想入行均可以来了解一块儿进步一块儿学习!裙内有开发工具,不少干货和技术资料分享!编程
让咱们举一个现实生活中的真实例子,好比一台电视机,您能够打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),可是您不知道它的内部实现细节,也就是说,您并不知道它是如何经过缆线接收信号,如何转换信号,并最终显示在屏幕上。函数
所以,咱们能够说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理,直接经过它的外部接口(好比电源按钮、遥控器、声量控制器)就能够操控电视。工具
如今,让咱们言归正传,就 C++ 编程而言,C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操做对象数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。学习
例如,您的程序能够调用 sort() 函数,而不须要知道函数中排序数据所用到的算法。实际上,函数排序的底层实现会因库的版本不一样而有所差别,只要接口不变,函数调用就能够照常工做。开发工具
在 C++ 中,咱们使用类来定义咱们本身的抽象数据类型(ADT)。您可使用类 iostream 的 cout 对象来输出数据到标准输出,以下所示:spa
#include <iostream> using namespace std; int main( ) { cout << "Hello C++" <<endl; return 0; }
在这里,您不须要理解 cout 是如何在用户的屏幕上显示文本。您只须要知道公共接口便可,cout 的底层实现能够自由改变。设计
在 C++ 中,咱们使用访问标签来定义类的抽象接口。一个类能够包含零个或多个访问标签:code
访问标签出现的频率没有限制。每一个访问标签指定了紧随其后的成员定义的访问级别。指定的访问级别会一直有效,直到遇到下一个访问标签或者遇到类主体的关闭右括号为止。
数据抽象有两个重要的优点:
若是只在类的私有部分定义数据成员,编写该类的做者就能够随意更改数据。若是实现发生改变,则只须要检查类的代码,看看这个改变会致使哪些影响。若是数据是公有的,则任何直接访问旧表示形式的数据成员的函数均可能受到影响。
C++ 程序中,任何带有公有和私有成员的类均可以做为数据抽象的实例。请看下面的实例:
#include <iostream> using namespace std; class Adder{ public: // 构造函数 Adder(int i = 0) { total = i; } // 对外的接口 void addNum(int number) { total += number; } // 对外的接口 int getTotal() { return total; }; private: // 对外隐藏的数据 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 是对外的接口,用户须要知道它们以便使用类。私有成员 total 是用户不须要了解的,但又是类能正常工做所必需的。
抽象把代码分离为接口和实现。因此在设计组件时,必须保持接口独立于实现,这样,若是改变底层实现,接口也将保持不变。
在这种状况下,无论任何程序使用接口,接口都不会受到影响,只须要将最新的实现从新编译便可。