2

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

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

在此处输入图像描述

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

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

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

4

2 回答 2

4

解释你的图表

你的图表说:

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

图表中的潜在问题

首先,在哪里放置多重性存在明显的混淆,因为新任命的医生在他/她开设诊所时可能没有病人。反之,没有医生的病人不是病人,而是健康人。所以请记住,多重性在目标旁边:对于 a1..n的数量也是如此,而不是相反。PatientsDoctor

然后标签“attents to”附近的三角形表示阅读的感觉。在这里Doctor attends to Patient但总的来说,看医生的是病人。所以三角形应该在另一边并且与你画的那个对称。(对不起,最后一点没问题,我仍然可以提高我的英语;-)

通航性问题

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

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

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

于 2019-03-20T21:08:56.140 回答
0

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

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

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

这取决于您要构建的应用程序的要求,如果确实需要双向访问,则需要计算成本。

于 2019-03-20T08:11:05.393 回答