第六讲 抽象数据类型
文章目录
前言
本讲重点:黄色是重点中的重点
-
ADT操作的四种类型
-
表示独立性
-
表示泄露
-
不变量,表示不变量RI
-
表示空间,抽象空间,AF
-
以注释的形式撰写AF,RI
提示:以下是本篇文章正文内容,下面案例可供参考
一、ADT操作的四种类型
- 构造器(Creators):构造该类型的新对象
- 生产器(Producers):从该类型的旧对象创建新对象
例如:concat()函数 - 观察器(Observers):获取抽象类型的对象并返回不同类型的对象
例如:size()函数 - 变值器(Mutators):改变对象属性的方法
例如:add()函数
前三种可以是可变的或不可变的,而第四种只能是可变的
二、表示独立性(representation Independence)
- 定义:用户使用ADT时无需考虑内部如何实现,ADT内部表示的变化不应影像外部spec和客户端
三、表示泄露
顾名思义,就是说ADT中的属性或者是数据结构可以被其他人所使用;有的对象直接可以获得ADT中的属性的引用,那么此时,ADT中的属性就可以被更改,就不安全。
怎么防止表示泄露?
- 属性的类型尽量用不可变的,如果你想用可变的,return的时候要使用防御式拷贝
- 声明属性的时候使用private,final有时候也可以帮助防止表示泄露
一道小题:
四、不变量、表示不变量RI
不变量:在任何时候总是true
immutability就是一个不变量
表示不变量RI(Rep Invariant):R–>boolean
某个具体的表示是否是合法的,是判定条件(描述了什么是合法的表示集)
存在的意义:我不希望知道你的ADT使用什么方式存储的,换句话说,我不希望你的ADT的数据结构暴露给其他对象
五、表示空间,抽象空间,AF
为合法的RI中的每个值做出解释–即如何映射到抽象空间中
是一个映射,拿到一个ADT中存储的数据,通过一个什么样的方式把他解释成用户想要的数据
六 、以注释的形式撰写AF,RI,Safety from rep exposure
check rep():随时检查RI是否满足,在所有可能改变rep的方法内都要检查
总结
总结第六讲重要知识点