举例辨析关联(Association)中的几个概念

UML是描述现实世界的,所以,在碰到问题的时候,尽量搞清楚对象在现实世界中的关系,然后再把它用UML的语言表述出来。

 

总述:

关联分为单向关联(unidirectional association)和双向关联(bidirectional association)

如果想要 强调 整体-部分 的关系的话,还可以使用聚合(aggregation)和合成(composition),两者都是关联的增强形式;也就是说聚合和合成是关联的子集。此时,未强调部分的关联关系仍然如故。

 

 

 

我试着用汽车,发动机,千斤顶3个概念来举例说明UML中关于“关联(association)”的几个概念。

 

单向关联 双向关联

关联形式

语义

汽车 >  千斤顶

用千斤顶撬动汽车

汽车  千斤顶

用千斤顶撬动汽车;反向,千斤顶有吨数限制,调用汽车的方法取得汽车的吨数。

上述情况下,汽车和千斤顶之间有关联,但是并没有整体-部分这样的关系。

 

假设这样一种情况,某车队准备长途越野,要求所有车辆均配备一个千斤顶,此时,千斤顶成为汽车的一个组成部分(一般情况下并不是这样),那么:

关联形式

语义

汽车 <>>  千斤顶

(空心菱形)

强调汽车都有千斤顶(作为其一部分);(原有部分)用千斤顶撬动汽车

汽车 <>  千斤顶

(空心菱形)

强调汽车都有千斤顶(作为其一部分);(原有部分)用千斤顶撬动汽车;反向,千斤顶有吨数限制,调用汽车的方法取得汽车的吨数。

这就称为聚合,现在,强调千斤顶是车的一部分。

 

而下面的情况称为合成

关联形式

语义

汽车 <>>  发动机(实心菱形)

汽车都有发动机构成;汽车使用发动机提供动力

汽车 <>    发动机(实心菱形)

汽车都有发动机构成;汽车使用发动机提供动力;发动机马力大小对应汽车的重量,调用汽车的方法取得其重量。

 

聚合和合成的语义类似,都是强调两个对象之间的整体-部分的关系,其区别是:

作为整体的组成部分,前者的部分可以脱离整体单独存在;而后者的不可以,也就是说在合成关联中,整体消亡的话,部分也将消亡。

如上例,一辆汽车报废被遗弃了,一般会把千斤顶搬到别的车上带走,但是不会把发动机拆下来也带走。

 

===========================20060420 begin==========================================

再看下面这个例子:

Figure1所示的关联表达的是这样的语义:

一个律师(实例)作为兼职法律顾问可以是e-corporation的雇员,同时也是private-corp的雇员。

F2所示的关联表达的是这样的语义:

一个程序员(实例)要么是Google的雇员,要么是Microsoft的雇员,而不能同时是两者的雇员。

 

 

这两种关联还有一个重要的区别是:

当某个e-corporation破产的时候,兼职法律顾问(实例)仍然存在,他还是另一个公司的兼职法律顾问;但是,Microsoft破产的话,它的所有员工实例也都销毁了(员工都失业了)。

 

 

UML Distilled (Page 85)中这样写道:

…UML included aggregation, but with hardly any semantics.  As Jim Rumbaugh says, “Think of it as a modeling placebo”.

In addition to aggregation, the UML offers a stronger variety of aggregation, called composition.  With composition, the part object may belong to only one whole; further, the parts are usually expected to live and die with the whole.  Usually, any deletion of the whole is considered to cascade to the parts.  (This can be the dividing line between aggregation and composition --- add by Fitzwilliam)

 

关于aggregation并没有一个统一明确的定义,所以除非必要,不要使用aggregation

 

 

参考文献:

UML DISTRILLED SECOND EDITION

BY Grady Booch, Ivar Jacobson, and James Rumbaugh

 ===========================20060420 end==========================================

阅读更多
个人分类: UML StudyREC
上一篇[读书笔记]UML基本概念---Representing Relationships
下一篇TO DO ... ...
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭