2.1 Introduction to Data Abstraction 笔记

数据抽象是为了将数据对象的结构与数据对象的使用分离,与程式抽象类似。数据对象的结构依靠一组构造器和查询器表示,但单纯的构造器和查询器并不能表达数据对象的实质,它们还必须完全符合数据对象对应的特定条件。

序对

Scheme 通过序对的方式为我们提供数据抽象的能力,分别通过程式 conscarcdrcons 接收两个参数,并将这两个参数绑定返回一个数据对象;car 可获取数据对象的前一个参数并作为结果返回,cdr 可获取数据对象的后一个参数并作为结果返回。具体使用方式如下:

(define x (cons 1 2))
(car x)
1
(cdr x)
2

当然 cons 的参数也可以是数据对象,例如:

(define x (cons 1 2))
(define y (cons 3 4))
(define z (cons x y))
(car (car z))
1
(car (cdr z))
3

抽象屏障

如果通过数据抽象的方式构建一个有理数系统,我们可以将有理数设计为一对整数,其中一个为分子,一个为分母。接着使用 make-ratnumerdenom 构建有理数及获取它的分子和分母,对有理数的算术运算在这三个程式的基础上建立,类似 add-ratsub-rat 等。整个有理数系统的结构如下图所示:

Data-abstraction barriers in the rational-number package

抽象屏障用于隔离不同层级之间的差异,通过屏障实现对上层程式与下层程式的沟通,这样可以将数据构建的依赖限制在小范围内,有利于对代码进行维护和修改后,整个系统的功能保持一致性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容