哈工大软件构造复习第六讲

抽象数据类型(ADT)

ADT的特性:

  • 表示泄露
  • 抽象函数AF
  • 表示不变量RI

ADT四种操作类型

  • 构造器(Creator):创建一个该类型的新对象(可能实现为构造函数或静态函数)
  • 生产器(Producer):从一个类型的旧对象创建一个新对象(如String中concat方法)
  • 观察器(Observer):返回一个不同类型的对象(如List中的size方法)
  • 变值器(Mutator):改变对象属性的方法(如List中的add方法)

举例说明如下

2b4b836175c34d10ae99ec1bc42dd8b5.png

RI 表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应该影响外部spec和客户端。

不变性(Invariants)由ADT来负责其不变量,与client端的任何行为无关

表示泄露:表示泄露就是指用户不通过我们ADT提供的方法,就可以修改ADT的内容,出现不必要的麻烦。这种情况下,内部的数据结构就被泄露出去了,外部client可以看到或直接对我们的数据进行操作。

避免表示泄露的方法:

  • 使用防御式拷贝
  • 属性前加final
  • 使用private变量

最好的办法就是使用immutable的类型,彻底避免表示泄露。

AF抽象函数:R和A之间映射关系的函数,即如何去解 释R中的每一个值为A中的每一个值。

0169acbcd3ec448da856a43129e913a6.png

AF: 满射、非单射、 未必双射➡️ R中的部分值并非合法的, 在A中无映射值

表示不变性RI:某个具体的“表示”是否是“合法的”
也可将RI看作:所有表示值的一个子集,包含了所有合法的表示值或者一个条件,描述了什么是“合法”的表示值

选择某种特定的表示方式R,进而指定某个子集是“合法”的(RI),并为该子集中的每个值做出“解释”(AF)----即如何映射到抽象空间中的值。

checkRep 在所有可能改变rep的方法内都要检查

有益的可变性

当且仅当类型的值在创建后永远不会更改时,类型是不可变的。根据我们对抽象空间 A 和 rep 空间 R 的新理解,我们可以完善这个定义:抽象值不应该更改但是,只要 rep 值继续映射到相同的抽象值,实现就可以自由地改变它,以便客户端看不到更改。这种变化被称为有益的可变性(有益的可变性)。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值