【MIT软件构造】Abstract Data Types

Java访问权限

对于类:
public:可以被其他任何文件访问
package-private(默认):只能在这一个包中被访问
对于成员:
在这里插入图片描述

ADT是什么

抽象数据类型,包括抽象化(Abstraction)、模板化(Modularity)、封装性(Encapsulation)、信息隐藏性(Information hiding)、责任分离化(Separation of concerns),以达到减少bug、易于理解、易于修改的目的。关键点在于,我们定义的一个抽象数据类型,可以让用户并不关心数据是如何存储与表示的,而只需要关心这个数据的操作有哪些。换句话来说,一个抽象数据类型的操作标识了这个数据类型,如定义Person类存储一些信息,用户不需要知道它里面的数据的存储形式,但用户能操作这些数据,并达到自己的目的;再入list类,我们根据它的操作将它命名为list,而并不是它确实就是链表或者数组存储。
在这里插入图片描述

ADT的操作

一般来说一个抽象数据类型,如xd的操作分为四类,可由输入类型到输出类型的映射区分:
构造器(Creators):产生一个新的xd对象,some type -> xd
产生器(Producers):输入一个旧的xd对象,产生一个新的xd对象, xd -> xd
观察器(Observers):输出一个xd对象的某些特征, xd -> some type
改变器(Mutators):改变一个xd对象 ,xd (+ some type) -> void / some type / xd
下面是一些具体的例子,可以看到ADT在java中非常常见且有用

int 
creators: the numeric literals 0, 1, 2, …
producers: arithmetic operators +, -, *, /
observers: comparison operators ==, !=, <, >
mutators: none (it’s immutable)

List 
creators: ArrayList and LinkedList constructors, Collections.singletonList
producers: Collections.unmodifiableList
observers: size, get
mutators: add, remove, addAll, Collections.sort

String
creators: String constructors, valueOf static methods
producers: concat, substring, toUpperCase
observers: length, charAt
mutators: none (it’s immutable)

设计ADT的建议

1.定义多个简单的操作,而不是一个复杂的操作
2.定义操作不应过于狭窄,如list中定义sum操作相加其中元素,当list中元素为String时将不再适用
3.定义操作应全面,防止功能产生较大缺陷
4.不要混合泛型与确定类型

表示独立性(Representation independence)

一个ADT应该具有表示独立性,即此抽象类型的使用方式与实际数据存储形式是独立的。如不管是链表存储还是数组存储,List的操作在用户看来应该是不变的。

ADT的测试

可以看到ADT中的方法是相互关联的,如要测试观察器会用到构造器,所以允许循环检验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值