第2章 构造数据抽象

数据抽象:将程序中处理数据对象的表示的部分,与使用的部分相互隔离的技术。
形成复合数据的关键:程序设计语言中提供“黏合剂”把一些数据对象组合起来,形成更复杂的数据对象。

数据抽象导引

数据抽象的基本思想:构造出使用数据复合的程序,使它们就像是在“抽象数据”上操作一样(即除完成当前工作所必要的操作外,不做任何其它假设)。同时,一种“具体”数据表示的定义也与程序中使用该数据的方式无关。为实现这样的抽象,我们需要在这两层之间定义对接的界面,这是一组过程,称为选择函数构造函数,它们在具体表示之上实现抽象的数据。

Lisp 中提供了序对这一复合结构,通过基本过程 cons 构造出来。这一过程有两个参数,返回一个包含这两个参数作为其成分的复合数据对象。而对于一个给定的序对,可以用基本过程 carcdr 提取出前后两个部分。一个序对也是一个数据对象,这意味着可以用 cons 去构造那些元素本身就是序对的序对。序对可以用作构造任意种类的复杂数据结构的通用基本构件。

数据是什么:我们将数据定义为一组适当的选择函数和构造函数,以及它们必须满足的一组特定条件。比如对于序对这一数据,我们仅说明了对序对提供了三个过程cons, car, cdr 并且给出条件“对于任意对象 x, y 如果 z(cons x y) 那么 (car z) 就是 x(cdr z) 就是 y”。任何满足上述条件的三个过程都可以成为实现序对的基础。

层次性数据和闭包性质