HIT软件构造笔记四

本文探讨了抽象数据类型(ADT)的概念及其设计法则,包括构造器、生产器、观察器和变值器。强调操作应简洁一致,全面且方便用户,并指出ADT设计应避免混合抽象和具体。此外,介绍了ADT的测试策略以及不变量和抽象函数在确保表示安全和文档化中的作用。不变量用于确保任何时候都满足特定条件,而抽象函数则将内部表示映射到用户可见的对象。最后,讨论了如何通过文档化防止表示泄露。
摘要由CSDN通过智能技术生成

HIT软件构造笔记四
Abstract Data Type (ADT)
1.ADT的操作:
Creators create new objects of the type. 构造器
Producers create new objects from old objects of the type. 生产器
Observers take objects of the abstract type and return objects of a different type. 观察器
Mutators change objects. 变值器,改变对象属性的方法
在这里插入图片描述

2.ADT的设计法则
法则1:操作要简洁,一致。对于复杂的操作,应该拆分成多个简单操作的叠加,以此提高内聚性。
    法则2:操作要全面(即需要的功能要可以实现),且为用户提供方便的操作。
    法则3:要不是针对抽象,要不是针对具体,不要两者混合。因此面向具体应用的类型不应该有通用方法,面向通用的类型也不该有具体方法。
3.ADT的测试
总的来说,对构造器、生产器、变值器的测试要用观察器检查;对观察器的测试要用其他三类方法来产生或构造对象。但这样的风险是,可能会产生互相依赖的现象,导致无法找到真正的错误原因。
    解决方案:新创建一些方法来解除这些耦合,或者是把一部分私有方法改为公有方法,测试完后再换回私有。或者如果对于小型程序,只要测试结果都是正确的,也就可以解决问题。

4.不变量与抽象函数
Rep Invariant(RI) and Abstraction Function(AF)
Invariants:不变量,与程序运行无关,在任何时候都应该满足的一些条件

两个空间 R 和 A:R空间是ADT的内部表示的空间,A空间是ADT能够表示的存在于实际当中的对象。ADT的开发者关注的是R空间,client关注的是A空间。

Abstraction Function:从R空间到A空间存在一个映射,这个映射是一个满射,这个映射将R中的每一个值解释为A中的一个值。这个解释函数就是AF。

Rep Invariant:这是一个集合,是R空间所有值的子集,它包含了所有合法的表示值,而只有满足RI的值,才是合法值,才会在A空间内有值与其对应。
5.AF,RI和表示泄露安全说明的文档化
这些都是写在代码的注释中,而非规约中。要给出理由,证明代码并未对外泄露其内部表示,比如字段全部为private,还有对可变字段的处理等等。
    可用表示不变量来代替一些前置条件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值