UML中包含六中关系,分别是:关联(Association)、聚合(Aggregation)、组合(Composition)、泛化(Generalization)、依赖(Dependency)、实现(Realization)
一、
1关联关系(Association)
关联关系表示两个类之间存在某种语义上的联系。例如,一个人为一家公司工作,一家公司有许多办公室。我们就认为人和公司、公司和办公室之间存在某种语义上的联系。
关联关系提供了通信的路径,它是所有关系中最通用、语义最弱的。在UML中,用一条实线表示关系关系。例如:
关联关系中,有两种比较特殊的关系:聚合和组合。
1.2聚合关系(Aggregation)
聚合关系是一种特殊形式的关联。聚合表示类之间的关系是整体与部分的关系。聚合关系的含义是“聚”在一起的意义,也就是表示“部分”可以独立于“整体”而存在。在UML模型中用一个空心菱形的实线表示,空心菱形指向的是代表“整体”的类。如
1.3组合关系()
如果发现“部分”类的存在是完全依赖于“整体”类的,那么就应该用“组合”关系来描述。也就是组合关系比聚合关系更强,也称为强聚合。此时整体和部分是不可分的,整体的生命周期结束意味着部分的生命周期结束。在UML模型中,组合关系是用带有实心菱形的实线表示的。实心菱形指向的方向是代表“整体”类。如易于理解的例子“订单”与“订单项”之间的关系,如果订单不存在,订单项也就没有意义了,因此必然是组合关系。如图:
、
2泛化关系(Generalization)
泛化关系描述的一般事物与该事物中特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。
在UML中,对泛化关系有3个要求:
1)子类应与父类完全一致,父类所具有的关联、属性和操作,子类应都具有。
2)子类中除了与父类一致的信息外,还包括额外的信息。
3)可以使用父类实例的地方,也可以使用子类实例。
在UML模型中,用带空心箭头的实线表示,箭头指向父类。泛化关系基本上是由事物本身的特性决定的。例如,“动物”和“哺乳动物”、“卵生动物”之间是泛化关系。
3实现关系()
实现关系是用来规定接口和实线接口的类或组件之间的关系。接口是操作的集合,这些操作用于规定类或组件的服务。换言之,实线关系指定两个实体之间的一个合同,一个实体定义了一个合同,而另一个实体履行该合同。如
4依赖关系(Dependency)
有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,责成元素Y依赖于元素X。在UML中,用带箭头的虚线表示依赖关系。依赖关系是一种偶然性的、临时性的非常弱的关系。例如某人想过河,需要借用一条船,此时人和船就是依赖关系。如图
二比较
组合和聚合:组合和聚合的应用要根据应用场景来判断部分类和整体类之间的关系。例如:“电脑”是一个整体类,而“主板”是一个整体类,而“主板”、CPU等则是相对于它的部分类。那它们之间关系是整体类还是部分类?如果是在固定资产管理系统中,可能适合的就是“组合”;而如果对于在线的DIY系统,两者之间显然是“聚合”关系。因此
判断是聚合还是组合关系,关键在于要放到具体的应用场景中讨论。
综合:关联关系中两个类处于同一等级上,而聚合和组合关系中两个类处于不同等层上。从某种意义上来说,前面说的关联和泛化以及实现关系都属于依赖关系的一种,但是它们有更具特别的语义和影响,因此定义了其自己的名字和详细的语义。总体来说,几种关系
组合>聚合>关联>依赖
在作图时应尽量使用较强关系,这样表达也更准确。