软件构造的理论基础:抽象数据类型(ADT)

一、日常开发现状

在软件开发的过程中,java有本来就有的基本数据类型以及对象数据类型。例如常见的基本数据类型有我们常用的int double float等等,而对象数据类型代表了被封装好的可以用其定义一系列满足特别特征的数据类型。但在完成开发时,Java提供的数据类型是不够用的,而正如写实验时发现的,在很多情况下,我们更需要一些自己设计的具有特殊属性和方法的抽象数据类型来方便完成开发。

二、设计实现ADT

那么该怎么设计一个ADT呢,首先需要明确ADT是由操作定义的,与其内部的实现方法没有关系。在设计之前,我们需要知道它要实现什么方法,并根据这些方法推断需要的属性。例如实验二中的graph类,他就要实现一个图的操作,并且需要能够在这个图中加上顶底,加上边等,这都是由客户端决定的。总之以客户和程序员之间的规约spec先建设一个framework,在这个框架里填上API,这样一个有血有肉的ADT就可以创造完成了。

ADT具有四种需要分清的操作类型。在了解这几个操作类型之前,首先要搞明白可变数据类型和不可变数据类型的区别,这将直接影响到ADT中的操作实现。可变数据类型提供可以改变内部数据的值的操作,也就是说可以将内部数据值进行改变,并且不会改变内存中的数据位置。而不可变数据类型操作不能改变内部值,而是创建了一个新的对象,也就是开辟了一块新的空间来放置被改变过后的对象。ADT的四种操作类型分别是creator,producer,observer和mutator。其中操作creator实现了从无到有的过程,也就是一个创建的全新过程,例如构造一个静态函数,包装一个基本数据类型,或者一些valueof的操作。而producer则构建一个从旧到新的过程,例如将一个可变的数据类型变为不可变的数据类型。observer是观察数据类型的操作,例如说一个字符串的长度或者大小。mutator是变值器,会改变数据类型的相关属性,例如add操作等,会改变数据类型内部的结构并且一般返回void。

由于要保证建立的数据类型的正确性,并且由于可变的数据类型总能带来一些程序员难以发现的难以挽回的错误,所以要求表示独立性的存在。表示独立性又名RI,是保证输入后不被改变的一个属性,由于程序员不能放心的把数据类型的内部抽象数据完整的提交给客户端让他们进行操作,就必须把输入的数据进行封装以防表示泄露。在我们创造出的ADT中,必须时刻观察是否满足RI的要求。所以checkrep函数的存在就显得合理起来。并且在返回时,不能发生表示泄露的情况,就需要用到防御式拷贝,即需要将返回值赋给新创建出来的对象再进行返回。

另外,在日常中我们要习惯TDD的优秀编程习惯,首先在设计ADT之前,先设计好对ADT四个方面操作的测试策略,然后进行ADT的设计和编写,最终可以实现想要的ADT来实现相应的特殊功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值