这⾥列出了⼏个能够表达ADT思想的词:
- 抽象: 忽略底层的细节⽽在⾼层思考
- 模块化:将系统分为⼀个模块,每个模块可以单独的进⾏设计、实现、测试、推倒,并且在剩下的开发中进 ⾏复⽤。
- 封装:在模块的外部建⽴起⼀道“围墙”,使它只对⾃⼰内部的⾏为负责,并且系统别处的bug不会影响到它内 部的正确性。
- 信息隐藏:将模块的实现细节隐藏,使未来更改模块内部时不必改变外部代码。
- 功能分离:⼀个模块仅仅负责⼀个特性/功能,⽽不是将⼀个特性运⽤在很多模块上或⼀个模块拥有很多特性。
抽象数据类型(ADT)是通过它们对应的操作区分的。
- 操作可以分类为创建者、⽣产者、观察者、改造者。
- creator 创作该类型的新对象,creator可以将对象作为参数,但不是正在构建类型的对象
- producer 从该类型旧对象中产生新对象,String的Concat方法是一个producer
- observers 采用ADT对象并返回不同类型 eg:List中的Size()
- Mututors 改变对象 eg:List中的add()
- ADT的标识由它的操作集合和规格说明组成。
- ⼀个好的ADT应该是简单,逻辑明确并且表⽰独⽴的。
- 对于ADT的测试应该对每⼀个操作进⾏测试,并同时利⽤到创建者、⽣产者、观察者、改造者。
设计⼀个抽象类型包括选择合适的操作以及它们对应的⾏为。
- 设计少量,简单,可以组合实现强⼤功能的操作⽽⾮设计很多复杂的操作。
- 每个操作都应该有⼀个被明确定义的⽬的,并且应该设计为对不同的数据结构有⼀致的⾏为,⽽不是针对某些特殊情况。
- 操作集合应该充分地考虑到⽤户的需求,也就是说,⽤户可以⽤这个操作集合做他们可能想做的计算。
- 抽象类型可以是通⽤的:例如,列表、集合,或者图。