0

我们在应用程序中使用的数据结构往往包含大量各种类型的信息,而某些信息可能属于多个独立的数据结构。例如,人事数据文件可能包含姓名、地址和有关员工的各种其他信息的记录;并且每条记录可能需要属于一个用于搜索特定员工的数据结构,属于另一个用于回答统计查询的数据结构,等等。

尽管存在这种多样性和复杂性,但一大类计算应用程序涉及对数据对象的一般操作,并且出于有限数量的特定原因需要访问与它们相关联的信息。许多所需的操作是基本计算过程的自然产物,因此在广泛的应用中都需要它们。许多基本算法可以有效地应用于构建抽象层的任务,该抽象层可以为客户端程序提供有效执行此类操作的能力。因此,我们将详细考虑与此类操作相关的众多 ADT。它们定义了对抽象对象集合的各种操作,与对象的类型无关。

以上文本由 Robert Sedwick 在 C++ 中的算法中在抽象数据类型的上下文中进行了描述。

我的问题是

作者所说的“一大类计算应用程序涉及对数据对象的一般操作,并且出于有限数量的特定原因需要访问与它们相关联的信息”是什么意思。? 在这里,作者所说的通用操作和有限数量的具体原因是什么意思?

作者所说的“建立一个抽象层”是什么意思,以便客户端程序可以有效地执行这样的操作”?

谢谢!

4

4 回答 4

0

我认为抽象接口的意思是,它们的正确实现允许客户不沉迷于实现的细节,因此有效地执行操作以及对从抽象类派生的不同类型的通用对象的操作。另外我认为这里涵盖的模板是通用编程的核心

于 2012-08-21T10:49:38.783 回答
0

通过创建程序(算法)处理的对象,您可以将实际问题转化为计算机可以理解的内容。通常有不止一种方法可以完成这项工作。选择不仅在计算方面高效,而且使代码可读且易于维护的模型很重要。

由于通用算法只能在通用数据上运行,对代码的抽象访问层意味着您可以有效地更改算法,而无需过多关注数据接口。

只要接口保持不变,实现就可以改变。这意味着代码(或设计)是完整的并且专注于一项任务。避免各种程序部分之间的复杂链接导致解决方案更容易测试、调试和扩展。

于 2012-08-21T10:52:21.960 回答
0

通用操作是当您编写可以处理某些数据的代码时,无需明确知道它是什么类型的数据,以及您如何操作它。

考虑 C++ 库中的 std::find :

template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& value)
{
    for ( ; first != last; ++first) 
        if (*first == value)
            return first;

    return last;
}

此代码适用于任何可以提供迭代器(不仅仅是容器)的序列,以及任何可以T通过引用传递并使用==.

你不需要知道任何关于T.

于 2012-08-21T11:04:15.257 回答
0

他基本上是在描述 STL 的功能。我并不讨厌 Sedgewick,它是经典之作,我在 1986 年买了我的副本,但他正在为一个非常朴素的世界写作。一定要使用算法,但我会调出与一般软件工程有关的任何东西,并阅读更新的东西。

于 2012-08-21T11:33:59.117 回答