复习blog3

Abstract Data Type(ADT)

复习blog3

对抽象类型的操作可分为以下四类:

Creators:产生类型的新对象。

Producers:在已有对象的基础上产生新的对象。

Observers:输入抽象类型的对象,返回其他类型的对象。

Mutators:改变对象。

ADT实例:int

creators:0,1,2,......

producers:+,-,*,/

observers:==,!=,<,>

matutors:none(因为int是不可变的)

ADT实例:List

creators:ArrayList and LinkedList constructors,Collections.singletonList

producers:Collections.unmodfiableList

observers:size,get

mutators:add,remove,addALL,Collections.sort

(List是可变的)

Representation Independence:

好的ADT应该是表示独立的。

Testing an Abstract Data Type:

为每一个操作设计测试方法,测试方法间不可避免的会相互影响,测试creators,producers,mutators只能通过调用observers来观察结果,测试observers只能创建对象来进行观察。

Invariants of an ADT:

好的ADT最重要的属性就是保持其不变性,在程序运行过程中,程序始终保持不变的性质,ADT应由自身确保不变性,而不是依赖于调用者或者其他模块。

Rep Invariant and Abstraction Function:

两个值空间:

R:实现时用到的值空间;

A:需要支持的值空间;

例如:

复习blog3

抽象函数AF:R->A

RI:R->boolean 

RI表示空间R中的r是否被AF映射到空间A中的某个值,RI形成了空间R的一个子集,且子集中的所有元素均被AF映射到了空间A中。

例:

复习blog3

复习blog3

Checking the Rep Invariant:

在视线中采用断言技术来检查不变性是否保持,且应该在所有的creators和mutators作用类型方法的最后检查不变性。

Documenting AF and RI:

在类中定义Rep的位置说明AF,RI和不变性。

实例1:

复习blog3

实例2:

复习blog3