
(在app上图片看不清的话可以复制链接到浏览器里,就可以看清了,电脑端也可以看清)
尝试根据上课的PPT整理出了一份不是很全的思维导图,省略了一些东西,如果有不对的地方或者困惑的地方请多多指正。下附xmind导出大纲,希望能对大家的学习有所帮助.
抽象数据类型(二)
一、设计抽象类型
1. 良好的ADT设计
- 需要经验法则
- 选择好的操作
- 设计行为规约spec
2. 经验法则
设计简洁、一致的操作
– 操作的意图应当良好定义
– 行为应当连贯
要满足用户对数据所有的操作需要,难度简单
要么普适,要么具体–不要混合
二、Representation Independence
1. 定义
用户使用ADT时无需考虑内部如何实现–
2. 测试优先编程
三、测试抽象数据类型
1. 测试creators, producers, mutators
2. 测试observers
3. risk
被依赖的其他方法有错误–被测试方法结果失效
4. 输入空间划分
测试覆盖所有划分
四、不变量
1. ADT始终需要保持其不变量
- 程序在任何时候总是保持true的性质
– 例:immutability - ADT负责不变量,与客户端无关
2. 为什么h4>
- 需要保持程序的正确性
- without不变量–需要随时检查是否改变
3. 防御性编程
- 假设用户存在破坏ADT不变量的恶意
- public->private, 增加final属性, 或使用immutable类型的对象
- 或:将责任留给用户:
- 当防御性拷贝的太假太高时不得已的举措
- 将存在潜在bug
五、RI和AF
1. 概括
-
表示值构成的空间: implementor空间–RI
-
抽象值构成的空间: client空间–AF
-
R->A的映射
满射:抽象value至少对应1个repvalue(未必单射,未必双射
2. AF
- R和A之间映射关系的函数:将R解释为一个A中的一个值
3. RI
- 某个具体表示是否合法
如何确定AF和RI
- ADT本身不能决定
- 可以有多种内部实现方式–对应不同的AF,RI
- 对于任意种RI, 必然需要对应的AF进行映射
- ADT+R(+RI)均不能
- 映射方式不同&解释方式不同
- 当防御性拷贝的太假太高时不得已的举措
- 将存在潜在bug
表示值构成的空间: implementor空间–RI
抽象值构成的空间: client空间–AF
R->A的映射
满射:抽象value至少对应1个repvalue(未必单射,未必双射
- 可以有多种内部实现方式–对应不同的AF,RI
- 对于任意种RI, 必然需要对应的AF进行映射
- 映射方式不同&解释方式不同
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93778 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!