一、简介
在UML类图中,常见的有以下几种关系: 关联(Association),依赖(Dependency),泛化(Generalization), 实现(Realization)。
除此之外,还有:聚合(Aggregation),组合(Composition)
A Relationship captures an association between things in the real world. A Relationship is stated in terms of the formal objects that model the real world entities participating in the association. There can be any number of Relationships between the same two objects and any object can participate in any number of Relationships with other objects.
(关系捕捉现实世界中事物之间的关联。关系是根据模拟参与关联的现实世界实体的形式对象来陈述的。在相同的两个对象之间可以存在任意数量的关系,并且任何对象都可以参与与其他对象的任意数量的关系。)
二、积累
1.关联(Association)
【关联关系】:是一种拥有的关系,描述了两个或多个类之间的结构性关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。还有自身关联。
【箭头及指向】:带普通箭头的实心线,指向被拥有者
2.依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
3.泛化(Generalization)
【泛化关系】:是一种继承关系,表示一般与特殊的关系,特殊元素(子元素)的对象可替代一般元素(父元素);它指定了子类如何特化父类的所有特征和行为。子元素共享了父元素的结构和行为,例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类
4.实现(Realization)
【实现关系】:是类元之间的语义关系,是一种类与接口的关系,表示类是接口所有特征和行为的实现.
【箭头指向】:带三角箭头的虚线,箭头指向接口
三、实用扩展的积累
5.聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体
6.组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
各种关系的强弱顺序:
五、关系的总结
1、【泛化】PK【实现】
相同点:相当于继承。 子类继承父类,父类泛化子类。
关系强弱比较:泛化=实现
2、【关联】PK【依赖】
相同点:都表示依赖关系。区别:类之间关系的强弱程度和类之间关系的时间长短。
【关联】表示类之间的很强的关系,它表示类之间的“持久”关系,这种关系一般表示一种重要的业务之间的关系,需要保存的,或者说需要“持久化”的,或者说需要保存到数据库中的。
【依赖】表示类之间的较弱的关系,它表示类之间的是一种“临时、短暂”关系,这种关系是不需要保存的。
关系强弱比较:关联>依赖
3、【聚合】PK【组合】
相同点:两者都表示‘拥有’的关系,区别:生命周期的长短。
【聚合】:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,他们的生命周期或许是不同的,A对象不随着B对象的消失而消失,两者可以独立存在。
【组合】:表示一种强的‘拥有’,他们是部分和整体的关系,他们的生命周期是相同的,A对象会随着B对象的消失而消失,二者是不能独立存在的。
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖