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系统,两者之间显然是“聚合”关系。因此
推断是聚合还是组合关系,关键在于要放到详细的应用场景中讨论。
综合:关联关系中两个类处于同一等级上,而聚合和组合关系中两个类处于不同等层上。从某种意义上来说,前面说的关联和泛化以及实现关系都属于依赖关系的一种。可是它们有更具特别的语义和影响,因此定义了其自己的名字和具体的语义。整体来说,几种关系
组合>聚合>关联>依赖
在作图时应尽量使用较强关系,这样表达也更准确。