目录
5 表示独立性Representation Independence
11 记录RI、AF和表示泄露的安全性(Safety from Rep Exposure)
1 数据抽象
抽象类型强调“作用于数据上的操作”,程序员和客户无需关心数据如何具体存储的,只需设计/使用操作即可。ADT是由操作定义的,与其内部如何实现无关。例如,当我们谈到List时,我们说的不是linkedlist或array或任何其他表示列表的特定数据结构。相反,我们指的是一组不透明的值(不透明值)——可能具有满足List:get()所有操作规范的List类型的对象。
2 可变和不可变类型
可变类型的对象:提供了可改变其内部数据的值的操作。
不变数据类型:其操作不改变内部值,而是构造新的对象。
3 抽象类型操作的分类
构造器:创建该类的新对象。creator : t* → T
生产器:从该类型的旧对象中创建新对象。producer : T+, t*→T
观察器:获取抽象类型的对象,并返回不同类型的对象。observer : T+, t*→t
变值器:改变对象属性的方法。mutator : T+, t*→void | t | T
其中T是抽象数据类型本身,t是别的类型,+表示该类型可能在签名的该部分中出现一次或多次,*表示它发生了零次或更多次,|表示或。
4 抽象类型设计
设计好的ADT,靠“经验法则”,提供一组操作,设计其行为规约 spec。
4.1 经验法则一
设计简洁、一致的操作。每个操作都应该有一个定义良好的目的,并且应