抽象数据类型和表示独立性:如何设计良好的抽象数据类型,通过封装避免表示泄露
操作和其规约完整定义了数据类型,通过抽象同具体的数据结构、内存存储分离开
可变数据类型:提供可改变内部数据值的操作
不可变数据类型:操作不改变内部数据值,而是创建新对象
四种操作:creator 构造器,从无到有
producer 生产器,从有到新
observers 观察器,得到某些属性
mutators 变值器,改变对象属性的方法
creator的两种方式:new、静态方法
mutator通常返回void,返回void说明修改是成功的
举例:
ReadLine是mumator是因为这个操作会修改内部指针
设计ADT的原则:
简洁、一致的操作。比如在List类型中不要有sum方法,因为保存字符串就会失效
完备性
要么抽象、要么具体,不要混合在一起
表示独立性:ADT的使用不受内部数据结构的影响
避免表示泄露和表示独立性,是设计ADT时一定要注意的
对于一个ADT来说,有两个数据空间,一个R:表示空间(实现者看到和使用的值),一个是A:抽象空间(用户看到的值)
表示空间向抽象空间的映射一定是满射(用户看到的值一定有表示空间的值与之对应),未必是单射,未必是双射(表示空间里一些值可能映射不到抽象空间)
表示不变性RI:某个具体的表示是否合法
也可以将RI看做所有表示值的子集,包含了所有合法的表示值
选择某种表示方式R,进而指出某个方式是合法的(RI),并为子集的每个值做出解释(AF)
相同的R和A,可能有不同的RI:
相同的RI,也可能有不同的AF
用生活中的例子形象说明,比如要选出身高较高的男生(RI),可以拿卷尺测量,也可以和某个人的身高进行目测比较,测量和比较就是不同的AF