UML关联类 - 澄清

问题描述 投票:3回答:4

我正在阅读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实例,没有更少,仅此而已?

uml associations
4个回答
-1
投票

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

A 1-* C
B 1-* C

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

对于B上的每一行只能存在1而且只有1行C和那个特定行(在C上)只能与A上的1行相关。因此,对于A和B上的每对唯一行,只能存在1行C或无,因为*表示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的情况下,由于同一个人可以与同一位医生进行多次约会,因此在Doctor一侧的关联结束必须注释为{nonunique}


0
投票

从UML 2.5规范:

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.