第四章:类图中一些复杂的概念
抽象类
- 定义:
- 抽象类是指那些不具有任何对象的类,其作用是为其他的类描述它们的公共属性和行为。
- 通常,抽象类具有一组抽象操作。一个拥有至少一个抽象操作的类必定是一个抽象类。
- 编写原因:
- 在我们编写一个类的时候,可能会对一些类的方法进行定义,但是并不具体实现。而是交给该类的子类根据自己的具体情况去实现,这样可以增强类设计的灵活性。
- 区别没有实现方法和空方法:
public int methodA();是没有实现的方法
public int methodA() { }是空方法体的方法。
接口
-
定义:接口是一组没有实现的操作的集合。接口只提供操作的声明,不提供任何相应的功能代码。具体的功能代码由使用该接口的类实现,这叫作实现关系。
-
特性:
- 接口中只包含普通函数,不包含构造函数和析构函数
- 接口中只能提供方法的格式声明,而不能包含方法的实现。
- 接口中的所有函数都被视为公有,不需要添加可见性
- 接口只包含操作而不包含属性,并且操作都是公有的(public),不允许使用可见性限定符。
- 特殊接口
- 常量接口:接口一般用来表示一组行为,但有时候也会用来表示静态数据,称为常量接口。
- 标识接口:没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,仅表明实现它的类有一个特定的类型。
接口VS抽象类
- 抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。抽象类允许增加一些方法的实现,但接口必须推迟定义所有的方法。
- 从语义层面上:抽象类是一种类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象。而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。
- 抽象类表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
其他的各种关联
- 限定关联:限定关联是一对多或多对多关联的另一种表示,它通过添加限定符来标识在这个关联的一方出现的多个对象中的每一个对象。注意:限定符是关联线的一个附加信息,而不是类的。
例如,紧贴关联目录类一端的小矩形是一个限定符,它限定目录对象使用文件名来标识属于它的每一个文件。
- 关联类:使用关联类时,在任何两个相关的对象之间只能存在关联类的一个实例。
关联类就像一个标准的类,可以用属性,操作以及与其他关联。其作用是为一个链接添加一些附加信息。
- 反射关联:当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。