【问题标题】:Confusion regarding association relationship in UMLUML中关联关系的混淆
【发布时间】:2019-03-20 03:00:50
【问题描述】:

首先,我对 UML 中类之间的关联关系感到非常困惑,因为存在单向关联和双向关联。

我画了一个简单的例子,就是:

但我在网上查找了一些示例,发现大多数示例都使用了 Patient 类和 Doctor 类之间的单向关联。

当我解释图表时,我会将其解释为“患者类知道医生类,但医生类不知道患者类”。但这仍然没有多大意义,为什么医生类不知道患者类?

谁能更详细地向我解释一下?将不胜感激。

【问题讨论】:

    标签: oop uml class-diagram conceptual-model


    【解决方案1】:

    图表解读

    您的图表表明:

    • 一个Doctor可以有多个Patients,但至少有一个(多重1..n
    • 一个Patient可以有多个Doctors,也可以没有(多重0..n
    • Doctorattends toPatient
    • Patient 对象可以找到关联的Doctor 对象(关联末尾的导航箭头)
    • 没有提及Doctor 是否可以找到他/她的Patients(在关联的另一端没有任何导航指示)。所以我们不知道

    图表中的潜在问题

    首先,在哪里放置多重性存在明显的混淆,因为新任命的医生在他/她的诊所开业时可能没有病人。反之,没有医生的病人不是病人,而是健康人。所以请记住,多重性紧挨着目标:所以1..n 大约是DoctorPatients 的数量,而不是相反。

    那么标签“attends to”附近的三角形表示阅读的感觉。这里是Doctorattends toPatient但总的来说,看医生的是病人。所以三角形应该在另一边并且与你画的那个对称。(对不起this last point was ok,我仍然可以提高我的英语;-)

    导航问题

    现在到navigability。该图明确表明Patient 知道并可以找到关联的Doctors。在医院登记系统中,当病人到达并且不记得医生的名字来寻找潜在的医生时,这是有意义的。

    但是您的图表没有说明相反的可导航性。这是“未指定”的。该图可以通过指示链接上的叉号(即不可导航性)或箭头(可导航性)来阐明情况。

    也许有一个反向导航,但它不是明确的(因为抽屉认为它是如此明显)。也许在那个方向上确实没有导航能力。所以Doctor 不知道它的Patients。例如,如果hospital registration system 认为患者是医院的患者并且交互总是通过管理进行,这可能是有意义的。在这种情况下,Doctor 可能具有与 Appointment 的可导航关联,而 Appointment 可导航关联到 Patient 或其他类型的间接导航

    【讨论】:

    • 非常好的和完整的答案!
    • 我同意,这是一个非常完整的答案。事实上,您在设计阶段以不同的细节使用相同的元素/连接器。 OP 的图表看起来像是处于早期设计阶段。所以需要说什么(方向、所有权、角色名称、多重性等)也很大程度上取决于设计阶段本身。就像一个念头。无需扩展答案,因为这只会导致另一本 UML 书 ;-)
    【解决方案2】:

    UML 中没有使用/定义术语“单向关联”和“双向关联”。相反,它们指的是在 OOP 中使用一个引用属性或一对相互反向的引用属性实现关联的方式(另请参见 this tutorial)。

    在概念模型中,我们不关心诸如“患者类是否了解医生类?”之类的问题。相反,我们只是模拟两个类之间存在关联的事实。

    关于AB 之间的关联,A“知道”B 是否更好地表述为:A 的实例是否需要直接访问@987654327 的实例@?在这种情况下,我们将添加一个引用属性A::b,以便能够直接访问/检索所有关联的B 对象。这可以通过在关联的B 一侧放置一个小点(在 UML 中称为“关联端所有权点”)在类图中表示。

    这取决于您要构建的应用程序的要求是否真的需要双向访问,而这会带来计算成本。

    【讨论】:

    • 单向/双向是指可导航性,在UML中定义的。从 v2.5 开始,他们还添加了点符号来指示是否存在引用另一方的属性,但这是两个不同的东西。在这种情况下,问题是关于可导航性(箭头),而不是关于引用属性(点符号)
    • 关于您的第一个声明:只需在规范中搜索 - 他们甚至没有提到“单向”和“双向”这两个词!关于您的第二个主张:问题不在于可导航性,而在于哪个类“知道”另一个类。
    • 是的,但这些只是表示箭头方向的常用词汇。我认为 OP 是在询问可导航性,而不是点符号。
    • @GeertBellekens 鉴于 OMG 在 p.42 关于 DirectedRelationship 的说法,我同意“它没有定义”的说法。它完全开放了该术语的“定向”部分的含义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多