针对复合数据的类似概念被称为 数据抽象 。数据抽象是一种方法学,它使我们能够将一个复合数据对象的使用,与该数据对象怎样由更基本的数据对象构造起来的细节隔离开。
数据抽象的基本思想就是设法构造出一些使用复合数据对象的程序,使它们就像是在“抽象数据”上操作一样。也就是说,我们程序中使用数据的方式应该是,除了完成当前工作所必须的东西之外,它们不对所用数据做任何多余的假设。与此同时,一种“具体”的数据表示的定义,也应该与程序中使用数据的方式无关。在我们的系统里,这样两个部门之间的界面将是一组过程,称为 选择函数和构造函数 。
有理数的表示
序对
为了实现有理数的数据抽象,这里采用语言提供的一种称为序对的复合结构,这种复合结构可以通过基本过程cons构造出来。过程cons取两个参数。返回一个包含这两个参数作为其成分的复合数据对象。
有理数的表示
1 | (define (make_rat n d) |
抽象屏障
一般而言,数据抽象的基本思想就是为每一类数据对象标识出一组操作,使得对这类数据对象的所有操作都可以基于它们表述,而在操作这些数据对象的时候也只使用它们。 抽象屏障 隔离了系统中的不同层次。在每一层上,这种屏障都吧使用数据抽象的程序与现实数据抽象程序分开。
这种思想可以舍得程序很容易维护和修改。任意一种比较复杂的数据结构,都可以多种不同方式的程序设计语言所提供的基本数据结构表示。
将对于具体表示方式的依赖限制到少数的几个界面过程中,不但对修改程序有帮助,同时也有助于程序设计,因为这种做法将使得我们能够保留考虑不同实现方法的灵活性。
数据意味着什么
数据究竟着什么?说他是“由给定的构造函数和选择函数所实现的东西”还是不够的。一般而言,我们总是可以将数据定义为一组适当选择函数今儿构造函数,以及为了使这些过程成为一套合法的表示,它们就必须满足一组特定的条件。
实际上数据的过程表示我们的程序设计中的一种核心角色。有关程序设计风格通常被成为消息传递。
使用代换模型帮助理解数据。