依赖(Dependency)
- 表示一个类使用另一个类,是四种关系中最弱的一种关系。
- 依赖关系是单向的。
- 例如动物依赖水,汽车依赖汽油等
- 具体代码有三种形式(被依赖的类作为局部变量)
- water是公共的类,animal可以调用其静态方法
- water是animal中的方法中的变量
- water是animal函数的参数或者返回值
关联(Association)
- 表示一个类拥有另一个类,关系相对依赖来说大大增强
分为聚合和组合,例如雁群和大雁(聚合),大雁和翅膀(组合)
聚合示例类图:
组合示例类图:
这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以使单向、双向的
- 具体代码表现为被关联类作为一个全局变量或属性
//聚合,部分变量生命周期可以超过整体变量的声明周期
class WirdGooseAggregate
{
private WideGoose widegoose; //成员变量定义大雁
public SetWideGoose (WideGoose w) //通过传参得到大雁的对象
{
this.widegoose = w;
}
}
//组合,部分变量生命周期不能超过总体变量生命周期
class Bird
{
private Wing wing; //成员变量定义翅膀
public Bird () //构造函数中实例化翅膀对象
{
wing = new Wing();
}
}
泛化(generalization)
- 是一个类(称为子类、子接口)继承另一个的类(称为父类、父接口)的功能,并增加它的新功能的能力
- 继承是类与类或者接口与接口之间最常见的关系
- 是一个父子关系,两个类之间的关系非常强
- 例如鲨鱼继承鱼,麻雀继承鸟
- 代码上表现为继承,在java中使用externs关键字
实现(realization)
- 是一个class类实现interface接口(可以是多个)的功能(是类与接口的关系)
- 是一种最常见的关系,设计时鼓励使用
- 接口可以说是对一种功能的抽象,比如有这么两个接口:飞翔、捕食,一个鸟类可以实现这两个接口,实现以后就具有这两个接口所具有的两个功能。‘’
- 在uml中的体现
- 在java代码中使用关键字implements表示