1. 抽象类
2. 抽象方法
3. 表示不变性与checkRep
4. 表示独立性
1. 抽象类面向对象的语言,例如Java中,所有的对象都是通过类来描绘的。
但是,并不是所有的类都是用来描绘对象的。抽象类就是这样的一个类:类中没有包含足够的信息来描绘一个具体的对象。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。抽象类必须被继承才能被使用,所以在设计阶段就需要决定要不要设计抽象类。
抽象类表示的是一种继承关系,一个类只能继承一个抽象类。
但是一个类可以实现多个接口。
定义抽象类
public abstract class Abstract
继承抽象类
public class ClassName extends Abstract
2. 抽象方法
在抽象类父类中声明抽象方法,它的所有子类都要实现这个方法。
用abstract 关键字来声明抽象方法,但是抽象方法只包含一个方法名,而没有方法体,即抽象方法方法名后面直接跟一个分号,而不是花括号。
public abstract class Abstract
{
private 各种变量;
public abstract DataType MethodName1();
public abstract DataType MethodName2();
//其余代码
}
注意:包含抽象方法的类必须是抽象类;任何非抽象子类必须重写父类的抽象方法。
3. 表示不变性与checkRep
表示不变性:ADT(抽象数据类型)必须保持性质不变,例如点集不能为空,概率不能大于1之类的规则。
若R表示空间,A表示抽象空间,即客户端看到和使用的值,则有
AF:R→A
A中的元素都肯定在R中至少有一个对应;而R中却可能有元素不和A中的任何元素对应,因此AF为满射而不一定是单射。
定义RI为
RI:R→boolean
如果R中的元素表示合法,则该元素在RI的映射值为true。RI描述了那些是合法值。
ADT的四种操作:构造器Creators、生产器Producers、观察器Observers、变值器Mutators。
Creators构造一个新的类,Producers从现有的类构造一个新的类,Observers从ADT的实现中获得信息,Mutators改变值。
在所有的Creators、Producers和Mutators之后都要checkRep(检查表示不变性):
测试Creators、Producers和Mutators:调用Observers来观察这些operations的结果是否满足spec。
破坏表示不变性:表示泄露。
防止表示不变性被破坏:尽量使用不可变的数据类型,修饰数据为private final,防御性拷贝。
4. 表示独立性
客户端使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端,客户端调用的结果相同,用户调用与内部实现方式无关。



