写在前面
课程中接触到了ADT,自感对其的理解还不够深刻,于是在这里做个总结,也算是复习了。
ADT与其类型
基本概念
- 抽象数据类型(Abstract Data Type,ADT)是是指一个数学模型以及定义在该模型上的一组操作;即包括数据数据元素,数据关系以及相关的操作。
- ADT由操作定义,与其内部如何实现无关。
- 强调“作用于数据上的操作”,程序员和client无需关心数据如何具体存储的,只需设计/使用操作即可。
基本特性
- 抽象化
- 模块化
- 封装
ADT的类型
- Creators(构造器):创建某个类型的新对象,⼀个创建者可能会接受⼀个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。可能实现为构造函数或静态函数。t* → T (A creator implemented as a static method is often called a factory method 工厂方法)
- Producers(生产器):接受同类型的对象创建新的对象。T+ , t* -> T
- Observers(观察器):获取抽象类型的对象然后返回一个不同类型的对象/值。T+, t* → t
- Mutators(变值器):改变对象属性的方法。变值器通常返回void,若为void,则必然意味着它改变了对象的某些内部状态;当然,也可能返回非空类型 T+ 。 t* -> t || T || void
Each T is the abstract type itself;
Each t is some other type.
The + marker indicates that the type may occur one or more times in that part of the signature.
The * marker indicates that it occurs zero or more times.
The | indicates or.
设计ADT的原则
- 设计简洁、一致的操作。
- 要足以支持用户对数据所做的所有操作需要,且用操作满足用户需要的难度要低。
- 要么抽象、要么具体,不要混合 —— 要么针对抽象设计,要么针对具体应用的设计。
ADT的测试方法
测试creators, producers, 和 mutators:调用observers来观察这些 operations的结果是否满足spec;
测试observers: 调用creators, producers, 和 mutators 等方法产生或改变对象,来看结果是否正确。
参考博客链接:抽象数据型(ADT)