【思维导图】HIT软件构造Java笔记——第六章抽象数据类型(二)

请添加图片描述
(在app上图片看不清的话可以复制链接到浏览器里,就可以看清了,电脑端也可以看清)
尝试根据上课的PPT整理出了一份不是很全的思维导图,省略了一些东西,如果有不对的地方或者困惑的地方请多多指正。下附xmind导出大纲,希望能对大家的学习有所帮助.

抽象数据类型(二)

一、设计抽象类型

1. 良好的ADT设计
  • 需要经验法则
  • 选择好的操作
  • 设计行为规约spec
2. 经验法则

设计简洁、一致的操作
- 操作的意图应当良好定义
- 行为应当连贯 不要添加为了某个type设计的多余操作

要满足用户对数据所有的操作需要,难度简单

- 测试方法:检查object每个可访问属性
- 基本信息不应当过度难于获取

	- 使用遍历元素获得listsize--提供size方法

要么普适,要么具体–不要混合

- 面向具体应用的类型不应当包含任意类型均可使用的方法
- 面向通用的类型不应包含限制具体类型的方法

二、Representation Independence

1. 定义

用户使用ADT时无需考虑内部如何实现–内部变化不影响规约和客户端

- 不能改变ADT的表示,除非操作被前提条件和后置条件充分限制,从而可以安全更改内容
2. 测试优先编程
按照规约的要求先进行测试的设计

三、测试抽象数据类型

1. 测试creators, producers, mutators
- 调用observers来观察结果是否满足spec
2. 测试observers
- 调用其他三种方法,观察结果是否正确
3. risk

被依赖的其他方法有错误–被测试方法结果失效

4. 输入空间划分

测试覆盖所有划分

四、不变量

1. ADT始终需要保持其不变量
  • 程序在任何时候总是保持true的性质
    - 例:immutability
  • ADT负责不变量,与客户端无关
2. 为什么?
  • 需要保持程序的正确性
  • without不变量–需要随时检查是否改变
3. 防御性编程
  • 假设用户存在破坏ADT不变量的恶意
  • public->private, 增加final属性, 或使用immutable类型的对象
  • 或:将责任留给用户:
    1. 当防御性拷贝的太假太高时不得已的举措
    2. 将存在潜在bug

五、RI和AF

1. 概括
  • 表示值构成的空间: implementor空间–RI

  • 抽象值构成的空间: client空间–AF

  • R->A的映射
    满射:抽象value至少对应1个repvalue(未必单射,未必双射
    不是所有的R内变量都可以有映射

2. AF
  • R和A之间映射关系的函数:将R解释为一个A中的一个值
3. RI
  • 某个具体表示是否合法

如何确定AF和RI

  • ADT本身不能决定
    • 可以有多种内部实现方式–对应不同的AF,RI
    • 对于任意种RI, 必然需要对应的AF进行映射
  • ADT+R(+RI)均不能
    • 映射方式不同&解释方式不同
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值