3.2Abstraction data type

ADT由操作定义在这里插入图片描述likeString and SB
adt操作的四种类型
构造器、生产器create new objects from old objects of the type,like String.concat()
observers、mutator变值器改变对象的属性
在这里插入图片描述
4设计抽象类型
良好ADT的设计:靠“经验法则”,提供一组操作,设计其行为规约 spec

设计规则
1、设计简洁、一致的操作
设计一组简单操作,通过简单操作的组合实现复杂的操作。操作的行为应该
是内聚的。
2、 要足以支持client对数据所做的所有操作需要,且用操作满足client需要的难度要低
在这里插入图片描述
3要么抽象、要么具体,不要混合 — 要么针对抽象设计,要么针对具体应用的设计
在这里插入图片描述
/**
*
*
*/

五、表示独立性
表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。
通过前提条件和后置条件充分刻画了ADT的操作,spec规定了client和implementer之间的契约,明确了client知道可以依赖哪些内容,implementer知道可以安全更改的内容。

六、测试ADT
▪ 测试creators, producers, and mutators:调用observers来观察这些
operations的结果是否满足spec; ▪ 测试observers:调用creators, producers, and mutators等方法产生或
改变对象,来看结果是否正确。
▪ 风险:如果被依赖的其他方法有错误,可能导致被测试方法的测试结
果失效。

七、不变量
在这里插入图片描述
为什么需要不变量:保持程序的“正确性”,容易发现错误
有可能出现表示泄露
:所以防御式编程
1、防御式拷贝在这里插入图片描述在这里插入图片描述8RI和AF
在这里插入图片描述 ADT开发者关注表示空间R,client关注抽象空间A在这里插入图片描述抽象函数:R和A之间映射关系的函数,即如何将R中的每一个值解释为A中的每一个值。
RI和AF的关系
AF是对RI上映射的解释

9有益变化
▪ 对immutable的ADT来说,它在A空间的abstract value应是不变的。
▪ 但其内部表示的R空间中的取值则可以是变化的。
在这里插入图片描述
adt spec的实现
在这里插入图片描述在这里插入图片描述十一、 ADT invariants replace preconditions
避免用户操作失误违反规约,自己处理就行了
易于理解 易于修改 易于防止bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值