【软件构造HIT】ADT复习笔记

抽象数据类型 (ADT)

ADT与传统数据类型之间的差异:

传统数据类型更加关注的是数据的具体表示,而ADT更关注数据的抽象(由一组操作所刻画的数据类型)。

ADT是由操作定义的,与其内部如何实现无关。在设计ADT时,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。

定义抽象类型的操作:

在这里插入图片描述

ADT例子
在这里插入图片描述

ADT的特性:

表示泄露、抽象函数AF、表示不变量RI

表示泄露:

表示泄露就是指用户不通过我们ADT提供的方法,就可以修改ADT的内容,出现不必要的麻烦。例如public的属性是一种表示泄露,mutable类型的数据直接传输是一种表示泄露。

防御措施:采用包括但不限于使用private、 final关键字、防御式拷贝等方式来避免表示泄露。

AF:

表示空间到抽象空间的映射。
在这里插入图片描述

其中A:抽象值构成的空间,也即client看到和使用的值
R:表示空间,也即开发者所关注的空间。

性质:满射,未必单射,未必双射。原因是R中的部分值并非合法的, 在A中无映射值。

如下图:
在这里插入图片描述

这里的AF是从s中取出所有的字符,构成集合,即为 client所需的抽象值

RI:表示独立性(Representation Independence)

Client在使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应该影响外部spec和客户端。

例子如下:
在这里插入图片描述
在这里插入图片描述

如何设计ADT:

(1)选择R和A;
(2) RI — 合法的表示值;
(3) 如何解释合法的表示值 —对映射AF 做出具体的解释:每个rep value如何映射到abstract value,而且要把这种选择和解释明确写到代码当中。(原因是即便是相同的R和RI,也可能有不同的AF,即解释不同。)
(4)随时检查RI是否满足
(5)给出表示泄露的安全声明,给出理由,证明代码并未对外泄露其内部表示,即自证清白。
可参考Lab2:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值