ADT操作的类型
- Creators:创建某个类型的新对象,⼀个创建者可能会接受⼀个对象作为参数,但不包括接受本类型的对象从而构建新对象。可能实现为构造函数或静态函数。(通常称为工厂方法)
- Producers:接受一个或几个本类型的对象从而创建新对象。例如String中concat()方法。
- Observers:接受本类型对象,返回其他类型对象。例如List的size()方法、Set的contains()方法。
- Mutators:改变对象内部值。例如List的add()方法。仅可变(mutable)类具有mutators。
抽象数据类型的例子
List 是Java中的列表类型,它是可更改类型。另外,List
也是一个接口,所以对于它的实现可以有很多类,例如 ArrayList
和 LinkedList
.
- creators:
ArrayList
和LinkedList
的构造函数, 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的本质是从计算机中的数据到布尔值的映射。