软件构造第三章——ADT的设计综述

一.抽象数据类型

抽象数据类型是一种定义在操作上的数据类型。与以前的数据类型不同,ADT倾向于操作,而不是具体的存储逻辑。对于JAVA来说,就像LIST抽象接口,我们只需要存,取,索引操作,而对具体的链表还是数组很多情况我们不需要考虑。

二.ADT类型与操作分类

ADT设计中不可变类型与可变类型的决定,是很重要的设计原则。
可变类型要求提供改变数据值的方法(这个值请参考下文)。
不可变类型中不提供改变数据值得方法。
可变类型的好处将在下一篇分享。
而ADT中可以定义的操作也分为四种:
1.creator
一般有constructor,静态工厂方法。
是根据一些数据创建新对象。
2.producer
一般是根据已经有的对象创建新对象,和creator不同的是,它一定要根据已经有的对象创建。
例如clone方法,String con cat方法。
3.mutator
改变ADT值的方法.
可变对象允许修改A空间,
不可变对象不允许修改A空间,但允许修改修改R空间。
一般来说返回void 方法一定是mutator
4.observer
观察对象内部,返回一个值。

三.表示独立性(represention independence)

1.客户端不应该依赖具体的实现细节而应该依赖抽象
2.除非制定了条件,否则不应该更改ADT内部实现。没有条件时候,客户端不知道到底和你约定了什么。

四.ADT方法的测试

ADT方法的测试,是有依赖性的。
测试creator,producer,mutator,用observer来查看变化。
测试observer,用creator,producer,mutator变化后观察。

五.不变性(Invariant)

不变性是指在ADT的整个生命周期永真的属性。
在我看来,就是一个ADT不会违背的原则。

可变与不可变就是一个ADT的不变性。
不变性是由ADT维护的,维护不变性更有利于发现错误,进行调试。一个ADT维护了不变性就可以让客户端知道哪些地方是可以放心使用的。比如String的不可变,让客户端使用String的时候不用自己检查。

表示泄露:表示泄露是指外部的代码,可以修改ADT内部的rep。
表示泄露就违背的表示独立性,也让ADT的不变性受损。因为你不知道客户端会如何修改你的rep,就不知道ADT会不会违背你设计的不变性。
表示泄露的防止:
private让rep对外不可见。
final 让引用不可变。
确保不会返回任何可变对象的直接引用,可以防御拷贝。

总之这一切都是ADT整体上的东西,ADT就是一个由操作定义的黑盒子。这个黑盒子应该是独立的,外界应该是不知道我的具体实现的,而只有我能修改这个黑盒子。这也是我觉得这一章的核心——封装。
封装带来安全性,只有封装才能避免傻帽随意修改。而这一章都是围绕封装的。举个例子,ADT就是一个电视机,你永远不知道他怎么运作的,但你就是会用。而方法就是电视机的各个功能。这也是为什么ADT定义在方法上,电视机被称为电视机的原因就是因为他播放的功能。播放就是这个ADT的功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值