本博客参考了HIT软件构造课程的PPT、MIT软件构造课程的教学资料。
目录
1 Abstraction and User-Defined Types 抽象和用户自定义类型
2 Classifying Types and Operations 分类类型和操作
3 Abstract Data Type Examples 抽象数据类型例子
5 Representation Independence 表示独立性
6 Testing an Abstract Data Type
抽象数据类型与表示独立性:
如何设计良好的抽象数据结构,通过封
装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在
的
bug——
在
client
和
implementer
之间建立“防火墙”。
ADT的特性:表示泄漏、抽象函数AF、表示不变量RI
基于数学的形式对ADT的这些核心特征进行描述并应用于设计中。
1 Abstraction and User-Defined Types 抽象和用户自定义类型
抽象类型:强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。
抽象数据类型是由其操作定义的!!!
2 Classifying Types and Operations 分类类型和操作
数据类型划分:
可变 immutable
可变类型的对象:提供了可改变其内部数据的值的操作
不可变 mutable
不变数据类型: 其操作不改变内部值,而是构造新的对象
注:有时,类型将以两种形式提供,可变形式和不可变形式。例如,StringBuilder是String的可变版本(但这两者肯定不是同一种Java类型,而且不能互换)。
抽象类型的操作种类:
构造器creators、生产器producers、观察器observers、变值器mutators(改变对象属性的方法)
3 Abstract Data Type Examples 抽象数据类型例子
immutable: int, String
mutable: List
4 Designing an Abstract Type
设计简洁、一致的操作
要足以支持client对数据所做的所有操作需要,且用操作满足client需要的难度要低
5 Representation Independence 表示独立性
表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端。
除非ADT的操作指明了具体的pre- 和post-condition,否则不能改变ADT的内部表示——spec规定了client和implementer之间的契约。
6 Testing an Abstract Data Type
测试creators, producers, and mutators:调用observers来观察这些operations的结果是否满足spec;
测试observers:调用creators, producers, and mutators等方法产生或改变对象,来看结果是否正确。
风险:如果被依赖的其他方法有错误,可能导致被测试方法的测试结果失效。