UML关联类 - 澄清

时间:2012-03-10 18:14:20

标签: uml associations

我正在阅读Martin Fowler撰写的“UML提取”,在阅读关于关联类的过程中,我得到了这句话:

What benefit do you gain with the association class to offset the extra notation you have to
remember? The association class adds an extra constraint, in that there can be only one instance of
the association class between any two participating objects.

然后有一个例子,但我想确保我做对了,如果我得到了:

 ---------            ---------
|         |*        *|         |
| CLASS A |----------| CLASS B |
|         |     |    |         |
 ---------      |     ---------
                |
          ______|______
         |             |
         |             |
         |  CLASS C    |
         |             |
         |_____________|

然后,对于每个不同的对(A的实例,B的实例),只存在一个C类实例。

因此,如果我将A1,A2,B1,B2实例用于(A1,B1)(A1,B2)(A2,B1)(A2,B2),我会得到4个C实例,不能少,仅此而已?

4 个答案:

答案 0 :(得分:0)

你的推理是正确的:如果一个关联类没有一个或两个用{nonunique}注释的关联结束,那么它意味着约束在同一个对象之间只能有一个链接(如Martin Fowler所解释的那样) )。

但请注意,非唯一关联结束的选项仅在UML 2中添加(2005年),而Martin Fowler的书(从2003年开始)引用了UML 1.x。

一些例子可能有所帮助。例如,LandPurchasePerson之间的关联PieceOfLand可以是一个UML关联类(默认唯一关联结束),因为在一个人和一个人之间只能有一个购买链接。一块土地。 ProductPurchasePerson之间的关联Product只能作为关联类进行模式化,如果Product侧的关联结束注释为{nonunique},因为可以是同一个人和同一产品(作为一种类型)之间的多个购买链接。例如,我可以购买多辆特斯拉Model S汽车(如果我有钱的话)。

同样,对于AppointmentPerson之间的Doctor,由于同一个人可以与同一位医生进行多次约会,因此关联结束于{{1} } side必须注释为Doctor

答案 1 :(得分:0)

来自UML 2.5规范:

  

请注意,当AssociationClass的一端或多端具有时   isUnique = false,可能有多个实例关联   结束类的同一组实例。

先生。福勒可能弄错了事实。没有额外的约束,只有存储其他属性值的能力。

当isUnique = false时,额外的属性允许人们在不同日期对同一位医生进行多次访问,或者在不同日期多次购买相同产品。

答案 2 :(得分:0)

UML中的关联表示(有)逻辑sens(UML不是数据库建模的工具!)。协会描述可能的逻辑事实。例如。两个人A和B可以结婚,我们可以将其绘制为关联,它表示的意思就像“我们知道人与人B之间存在逻辑联系”。如果我们知道那是什么,我们将阶级关联[婚姻证书]作为物化事实。

答案 3 :(得分:-1)

这是正确的,没有任何意图在这里混合概念,但它类似于数据库中的表,其中:

A 1-* C
B 1-* C

其中C可以看作是打破A和B之间多对多关系的结果。

对于B上的每一行只能存在1而且只有1行C和那个特定行(在C上)只能与A上的1行相关。 因此,对于A和B上的每对唯一行,只能在C上存在1行或没有,因为*表示0或更多。