关于UML中关联关系的困惑

Confusion regarding association relationship in UML

首先,我对UML中classes之间的关联关系感到很困惑,因为有单向关联和双向关联。

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

但我在网上查找了一些示例,发现大多数示例使用了患者 class 和医生 class 之间的单向关联。

当我解释图表时,我会这样解释 "the patient class knows about the doctor class but the doctor class does not know about the patient class." 但它仍然没有多大意义,因为为什么医生 class 不知道病人 class?

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

术语 "unidirectional association" 和 "bidirectional association" 在 UML 中不是 used/defined。相反,它们指的是在 OOP 中使用一个引用 属性 或一对相互反向的引用属性(另请参见 this tutorial)实现关联的方式。

在概念模型中,我们不关心 "does the patient class know about the doctor class?" 这样的问题。相反,我们只是模拟了两个 class 之间存在关联的事实。

关于 AB 之间的关联,A "knows about" B 的问题是否更好地表述为:做实例A 需要直接访问 B 的实例?在这种情况下,我们将添加一个引用 属性 A::b 以便能够直接 access/retrieve 所有关联的 B 对象。这可以通过在关联的 B 侧放置一个小点(在 UML 中称为 "association end ownership dot")在 class 图中表示。

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

你的图解

你的图表说:

  • 一个Doctor可以有多个Patients,但至少有一个(多重性1..n
  • 一个Patient可以有多个Doctors,并且可以有none(多重0..n
  • 一个Doctorattends to一个Patient
  • 一个Patient对象可以找到关联的Doctor对象(关联末尾的导航箭头)
  • 没有说明 Doctor 是否可以找到 his/her Patients(关联的另一端没有任何导航指示)。所以我们不知道

图表中的潜在问题

首先,对于将​​多重性放在何处存在明显的混淆,因为当 he/she 开始 his/her 执业时,新任命的医生可能没有病人。相反,没有医生的病人就不是病人而是健康人。所以请记住,多重性紧挨着目标:所以1..n是关于DoctorPatients的数量,而不是相反.

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

通航问题

现在进入navigability。该图明确表示 Patient 知道并可以找到关联的 Doctor。在医院登记系统中,当病人来了但不记得医生的名字时,查找潜在医生是有意义的。

但是你的图表没有说明相反的导航性。这是左"unspecified"。该图可以通过在 link 上打叉(即无法通航)或箭头(可通航)来阐明情况。

也许有反向导航,但不是很明确(因为抽屉假设它很明显)。也许那个方向确实没有通航能力。所以 Doctor 不知道它的 Patients。这可能有意义,例如,如果 hospital registration system consider that the Patient is the Patient of the hospital and the interaction has always to go via the administration. The Doctor may in such case have a navigable association to an AppointmentPatient 或其他类型的 间接导航性[=71= 具有可导航关联].