软件构造 | 抽象数据类型的设计

抽象数据类型和表示独立性:如何设计良好的抽象数据类型,通过封装避免表示泄露

操作和其规约完整定义了数据类型,通过抽象同具体的数据结构、内存存储分离开

可变数据类型:提供可改变内部数据值的操作

不可变数据类型:操作不改变内部数据值,而是创建新对象

四种操作: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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值