软件构造第三章3.3:抽象数据型(ADT)

ADT操作的类型

  • Creators创建某个类型的新对象,个创建者可能会接受⼀个对象作为参数,但不包括接受本类型的对象从而构建新对象。可能实现为构造函数或静态函数。(通常称为工厂方法)
  • Producers:接受一个或几个本类型的对象从而创建新对象。例如String中concat()方法。
  • Observers:接受本类型对象,返回其他类型对象。例如List的size()方法、Set的contains()方法。
  • Mutators:改变对象内部值。例如List的add()方法。仅可变(mutable)类具有mutators。

抽象数据类型的例子

List 是Java中的列表类型,它是可更改类型。另外,List也是一个接口,所以对于它的实现可以有很多类,例如 ArrayListLinkedList.

  • creators: ArrayListLinkedList 的构造函数, Collections.singletonList
  • producers: Collections.unmodifiableList
  • observers: size, get
  • mutators: add, remove, addAll, Collections.sort

表示独立性(RI)

定义:称一个ADT是表示独立的,意为这个ADT的使用与它的表示(真实数据结构等)无关。表示内部的修改对ADT外部的代码没有影响。不具有表示独立性称为表示泄露的(representation exposed)

意义:具有表示独立性的ADT,其使用及正确性仅与其各方法的spec有关,因此可以方便地修改ADT的内部表示以获得更佳的或更适用于新环境的性能。

获得表示独立性的途径:最简单的方式为将所有字段的访问控制全部设为private,并对producer和observer加入防御性拷贝。

题型

给定需求,设计ADT(包括representation(rep)、abstraction function(AF)、representation invariants(RI))

rep:ADT中的真实数据结构。

AF:所存储的数据对应于用户想要的何种内容。即从计算机中的数据到其现实含义的映射。

RI:确定存储的数据是否合法。通过RI可设计checkRep()。RI的本质是从计算机中的数据到布尔值的映射。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值