对于ADT的一些讨论与理解

    众所周知,ADT对于整个整个程序设计的过程中有着很重要的作用。使用ADT省略和隐藏了低级的细节,对系统的不同部分进行了很好的封装。而在我们学习的过程中,在这一部分涉及到了很多概念,正如文章题目所讨论。由于其重要性,在学习时我就比较仔细的想要弄明白各个的含义和不同。写成博客权当参考。

    ADT中的一大特性就是表示独立性(Representation Independence)这个RI并非常常说起中的RI(表示不变量)。Client在使用ADT时无需考虑内部实现,而ADT的内部实现也不会影响外部的抽象类型,抽象和内部类型是完全独立的。client 和 implementor 之间的交流考的就是spec规约。implementor依靠spec进行内部实现,而client依靠着spec对实现了的ADT进行一系列的操作。Representation Independence 就像是一座防火墙,挡在了client 和 implementor 之间,实现了对数据和操作具体细节实现的封装。

    对于一个ADT来说,最重要的属性就是保有自己的不变量,不变量有一个最重要的属性就是:对于每种运行状态,不变量永远都是正确的。比如说对于一个不可变对象,那么他就是一个不变量。不变量是由ADT来负责的,如果一个变量是一个不变量,呢么他应当与client的任何行为无关。

    表示泄漏:这对于ADT来说是一个很不好的行为,因为表示泄漏使得类的外部代码可以直接修改内部表示。这既会影响不变量也会影响到表示独立性。几个防止表示泄漏的操作,比如:防止泄漏了对不变性依赖的可变对象的引用,我们可以采取防御式拷贝的操作。 例:return new Date(timestamp.getTime()); 在实现ADT过程中也要时刻警惕,如果任何类型是可变的,我们应当确保实现中不返回对这个表示变量的直接引用。

    对于一个ADT来说,其拥有四类操作:构造器(constructor)生产器(producer)观察器(observer)变值器(mutator)。一些小细节:对于一个不可变类型来说,都不会拥有mutators。构造器是创建一个该类型的新对象,可能是以某个对象作为参数,但是这个对象一定不是正在构建的对象类型。如果这个对象是正在构建的对象类型,那么这个操作是生产器;观察器就是获取抽象类型的对象并返回一个不同类型的对象。变值器一般都是返回void或者是boolean 但是他对于对象的值进行了修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值