复习blog3
Abstract Data Type(ADT)
对抽象类型的操作可分为以下四类:
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:需要支持的值空间;
例如:
抽象函数AF:R->A
RI:R->boolean
RI表示空间R中的r是否被AF映射到空间A中的某个值,RI形成了空间R的一个子集,且子集中的所有元素均被AF映射到了空间A中。
例:
Checking the Rep Invariant:
在视线中采用断言技术来检查不变性是否保持,且应该在所有的creators和mutators作用类型方法的最后检查不变性。
Documenting AF and RI:
在类中定义Rep的位置说明AF,RI和不变性。
实例1:
实例2: