3.3类的关系
关系(Relationship)是指事物之间的联系 。泛化、实现、依赖和关联都是重要的关系。
泛化(generalization)
是一般事物(称为父类或超类)和较特殊事物(称为子类或孩子类)之间的关系。 (代码级)
`泛化关系特征
一般类定义了共同的属性和方法
特殊类继承了一般类的属性和方法
特殊类还可以定义自己的属性和方法
泛化关系只有在系统运行时它存在,系统不运行时它不存在,除非要将两类对象永久保存
实现(realization
)是类元(类)之间的语义关系,关系中的一个类元(类)描述了另一个类元(接口)实现的契约。
依赖(dependency)
是一种使用关系,它说明了一个事物声明的变化可能影响到使用它的另一个事物,但反之未必。 (代码级)
依赖关系特征
一个类的方法的参数的数据类型是另一个类的定义
一个类的方法使用了另一个类的属性
一个类的方法调用了另一个类的方法
一个类的方法实例化了另一个类的对象
一个类的每一个对象与另一个类的所有(或部分)对象存在操作运行上的联系
依赖关系只有在系统运行时它存在,系统不运行时它不存在
关联
是一种结构关系,它详述了一个事物的对象与另一个事物的对象相互联系 。 一个类的实例与另一个类的实例在结构上的静态联系。
关联关系特征
一个类的属性的数据类型是另一个类的定义
一个类的部分对象与另一个类的部分对象存在属性值上的联系
关联关系一旦建立,系统运行与否它都存在
关联关系
静态的
数据(指属性值)级别上的
部分的
有多重性
实体类之间存在关联关系
依赖关系
动态的
代码级别上的
全体的
无多重性
{边界类|控制类}和{边界类|控制类|实体类}之间存在依赖关系
1、关联名
可以给关朕加上关联名,来描述关联的作用,以便和其他关联关系相区别
2、关联角色
关联关系两端的类的对象在对方的类里的标识称为角色
3、多重性
多重性表示可以有多少个对象参与该关联。
在下图中,雇主(公司)可以雇佣多个雇员,表示为0…n;雇员只能被一家雇主雇佣,表示为1。
4、关联类
如果在具有关联关系的类中,存在一个属性放在哪个类中都不合适的情况,就可以考虑使用关联类
5、关联约束
对于关联可以加上一些约束,以加强关联的含义
6、限定关联
在关联端紧靠源类图标处可以有限定符。限定符的作用就是在给定关联一端的一个对象和限定符值以后,可确定另一端的一个对象或对象集。
7、自反关联
一个类与自身的关联。
自返关联虽然只有一个被关联的类,但有两个关联端,每个关联端的角色不同。
例如,“人”类的自返关联“结婚”。一个人与另一个人结婚,必然一个扮演丈夫角色,另一个扮演妻子角色。
8、N元关联
3个或3个以上类之间的关联。
9、聚合(聚集)关系聚合是一种特殊形式的关联。聚合表示类之间整体与部分的关系。
整体与部分没有相同的生存期。
整体不存在了,部分仍能存在。
注意:
接口,接口的实现类,接口的使用类,应用程序类
基于接口的编程
体现了:高内聚,低耦合,可扩展性
抽象类(abstract class)
是不能直接产生实例的类。抽象类可以有属性,但是必然存在某些方法只是一些声明,而没有具体的实现。其它的一些方法可以有实现。抽象类一般作为超类(或基类、父类)存在,用于描述其他类的公共属性和操作。
接口(interface)
定义为一个类的对外可见的一组操作的规范,它定义了类对外提供的服务。接口包含操作但不包含属性。所有的操作只是一些声明,而没有具体的实现。不能对接口实例化。
实现关系
:一个类提供了另一个类对外公布的操作规范的实现代码。接口是一个特殊的类(无属性,有操作
),实现接口操作的类(称为实现类)与接口之间存在实现关系。调用接口操作的类(称为使用类)与接口之间存在依赖关系。
抽象类和接口
共同点
两者都有方法没有提供实现代码
提供实现代码的其他类,实现的算法不同,会导致两者具有不同的行为。因此,很容易扩展软件系统的功能。
不同点
抽象类有些方法可以提供实现代码,接口所有的方法都没有提供实现代码
抽象类只能被继承,接口只能被实现