1.ADT的特性
-
数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)
-
数据封装:将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节,它包含两层含义:
-
①将数据和其行为结合在一起,形成一个不可分割的独立单位;
-
②信息隐藏,即尽可能隐藏数据内部细节,只留有限的对外接口形成一个边界,与外部发生联系。封装的原则使得软件错误能够局部化,大大降低排错的难度,便于软件的维护。
-
-
继承性:数据封装使得一个类型可以拥有一般类型的数据和行为,即对一般类型的继承。若特殊类型从多个一般类型中继承相关的数据和行为,则为多继承。
-
多态性:多态性是指在一般类型中定义的数据或行为被特殊类型继承后,具有不同的数据类型或呈现出不同的行为。
2.ADT的四种操作方法
(1)Creator(构造器)
构造一个之前并不存在的
(2)Producer(生产器)
在已有的基础上构造一个新的。比如用concat()连接两个字符串为一个新的字符串
(3)Observer(观察器)
接受抽象类型对象并返回一个不同类型的对象。例如,List中.size()方法,查看List中有几个元素,返回一个int对象
(4)Mutator(变值器)
改变对象属性的方法。例如List中.add()方法,向集合中增加一个新的元素
3.ADT类型
(1)可变类型对象:提供了可改变其内部数据的值的操作
(2)不可变类型对象:其操作不改变内部值,而是构造新的对象
4.AF(抽象函数)
(1)表示值构成的空间R:开发者看到和使用的值
(2)抽象值构成的空间A:用户看到和使用的值
(3)AF:抽象函数就是R和A之间关系的映射函数,即将R中的值解释为A中的值
5.RI(表示不变量)
某个具体的表示是否为合法的(描述了什么为合法值)
6.Rep Exposure(表示泄露)
指在某些情况下,ADT向外部泄露了自己的表示,从而使调用者有能力修改ADT的内部表示。这种情况下有可能会破坏ADT的不变量,可能威胁到ADT的表示独立性。
可以使用防御式拷贝等方法来避免表示泄露。