2 Data Abstraction

2.1 Specifying Data via Interfaces

一般来说,数据类型可以对应多个满足这种类型的实现。比如整数,可以使用阿拉伯数字,也可以通过数点的个数来实现。如果在需要表示一种数据类型时,我们直接定义一种数据类型的实现以及相关操作。但在需要更改实现时,会很麻烦,因为使用者也需要更改所有依赖这种实现的代码。

通过数据抽象,一种数据类型可以分成两个部分:interface(接口,是数据类型的本质特征所在)和implementation(具体实现)。接口表明数据类型(概念上的类型)的特征,具体实现是该数据类型的一种实现。通过这种方式定义的类型也叫abstract data type(抽象数据类型)。使用这种方法,可以只给使用者提供接口,把实现细节隐藏。这样当我们更改数据类型的实现时,使用者不需要更改任何东代码。

如果用户程序只通过抽象数据类型的接口来操作数据,那么用户程序就是representation-independent(具体实现无关)的。

举个例子,自然数这种数据类型,其向外提供以下接口:zero、is-zero?、successor、predecessor。其中zero、successor、predecessor称为constructor(构造器),is-zero?称为observer(观察者)。

实现方法有:Unary representation(一元表示法),Scheme number representation(Scheme语言表示法),Bignum representation(大数表示法)。

如果能知道抽象数据类型的具体实现,这该类型是transparent(透明),如果无法知道,则是opaque(不透明)。如果是透明型的数据类型,则需要约束使用者,让其只使用接口,不依赖具体实现,才能体现抽象数据类型的价值。

2.2 Representation Strategies for Data Types

本节通过使用environments(环境)数据类型来介绍一些实现数据类型的策略。环境数据类型用于关联变量名称和变量值的结构,可以理解成这样一个函数,如果给其一个变量名称,会返回一个值。

2.2.1 The Environment Interface

环境类型包括的接口:empty-env,apply-env,extend-env。

2.2.2 Data Structure Representation

The Interpreter Recipe

  1. Look at a piece of data.
  2. Decide what kind of data it represents.
  3. Extract the components of the datum and do the right thing with them.

2.2.3 Procedural Representation

2.3 Interfaces for Recursive Data Types

Designing an Interface for a recursive data type

  1. Include one constructor for each kind of data in the data type.
  2. Include one predicate for each kind of data in the data type.
  3. Include one extractor for each piece of data passed to a constructor of the data type.

2.4 A Tool for Defining Recursive Data Types

名称:define-datatype

2.5 Abstract Syntax and Its Representation

语法,可以用来表示某种意思。语法分为concrete syntax(具体语法)和abstract syntax(抽象语法),类似数据类型的接口和具体实现。抽象语法通常使用abstract syntax tree(AST,抽象语法树)来表示。

同一个抽象语法,可以对应多个具体语法。例如,概念中的鸟,中文叫“鸟”,英文则叫“bird”,还有其它语言的叫法。不同的文字,可以表示同一个概念。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容