数据抽象简单理解是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。
数据抽象(data abstraction)是与面向对象(object-oriented)并列的一种编程范式(programming paradigm)。它的另外一个名字是“抽象数据类型/abstract data type/ADT
”。
就 C++ 编程而言,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(70);
cout << "Total " << a.getTotal() <<endl;
return 0;
}
程序输出如下:
(base) harley@ubuntu:~/Program/Programe_Language/Cpp_codeg++ADTdemo.cpp(base)harley@ubuntu: /Program/ProgrameLanguage/Cppcode ./a.out Total 100
上面的类把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户需要知道它们以便使用类。私有成员 total 是用户不需要了解的,但又是类能正常工作所必需的。
抽象把代码分离为接口和实现。所以在设计组件时,必须保持接口独立于实现,这样,如果改变底层实现,接口也将保持不变。在这种情况下,不管任何程序使用接口,接口都不会受到影响,只需要将最新的实现重新编译即可。
数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。 C++ 通过创建类来支持封装和数据隐藏(public、protected、private),类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。