(在app上图片看不清的话可以复制链接到浏览器里,就可以看清了,电脑端也可以看清)
尝试根据上课的PPT整理出了一份不是很全的思维导图,省略了一些东西,如果有不对的地方或者困惑的地方请多多指正。下附xmind导出大纲,希望能对大家的学习有所帮助.
抽象数据类型
概述
抽象数据类型与表示独立性
- 分离程序中数据结构和具体的实现形式
- dangerous problem
用户对类型的内部表示进行猜想
目的
设计良好的数据结构
- 通过封装避免客户端获取数据的内部表示
- 表示泄露
避免潜在bug
- 建立client——implementer之间的防火墙
ADT的特性:(解释class的meaning)
- AF, rep invariants
- invariants, representation exposure
- 均基于数学形式进行描述
Abstraction, User-defined types
介绍
- built-in 类型:整形, 布尔型…
- 自定义类型
数据抽象
由一组可实现操作刻画的数据类型
辨析
- 传统类型定义
- 关注数据的具体表示
- 抽象类型定义
- 强调作用于数据上的操作
基于操作定义的抽象数据类型
- a set of opaque values
- 可以实现list类操作的--均是list
对操作和类型进行分类
可变和不可变数据类型(mutable/immutable)
可变类型对象
- 提供改变内部值得operations
不可变类型对象
- 可以new 不能change
对操作进行抽象分类
- 构造器creator
构造方法——从无到有 - 生产器producer
concat() of String–producer产生了一个新的同类对象(immutable类型) - 观察器observer
返回不同类型的对象 - 变值器mutator
改变对象–add() of List
构造器
可实现为构造函数/静态函数:静态方法–xx.aslist
- 通常称为工厂方法
变值器
-
通常返回void:将会产生副作用
-
也可返回非空类型: Set.add
- 返回布尔值
ADT举例
int不可变
-
没有mutator
-
producer
- 四则运算
-
observers
- ==,!=…
String不可变
-
producer
- concat, substring, toUpperCase
-
observer
- length, charAt
List可变
-
creator
- 链表/数组的构造函数
-
producer
- Collection.unmodifiableList
-
observer
- size, get
-
mutator
- add, remove, addAll, .sort