关于UML中的关联关系的困惑

时间:2019-03-20 03:00:51

标签: oop uml class-diagram conceptual-model

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

我画了一个简单的例子,

enter image description here

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

当我解释该图时,我会这样解释:“患者阶层知道医生阶层,但医生阶层不知道患者阶层”。但这仍然没有什么意义,因为为什么医生阶层不知道患者类别?

有人可以向我详细解释吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

图的解释

您的图说:

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

图表中的潜在问题

首先,对于在哪里放置多样性存在明显的困惑,因为新任命的医生在开始执业时可能没有病人。相反,没有任何医生的患者不是患者而是健康人。因此请记住,多重性紧邻目标1..n大约等于Patients的{​​{1}}的数量,而不是相反。

然后,标签“ attend to”附近的三角形表示阅读感。这是Doctor Doctor attends to。 <罢工>但是总的来说,耐心地去看医生。因此,三角形应该在另一侧并且与您绘制的三角形对称。 (对不起this last point was ok,我仍然可以提高英语;-)

可导航性问题

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

但是您的关系图没有说明相反的可导航性。保留为“未指定”。该图可以通过指示链接上的叉号(即无导航性)或箭头(导航性)来澄清这种情况。

也许存在反向导航性,但它不是明确的(因为抽屉假定它是如此明显)。也许在这个方向上确实没有导航性。因此Doctor不知道其Doctor。例如,如果hospital registration system认为患者是医院的患者,并且交互必须始终通过管理部门进行,那么这可能是有道理的。在这种情况下,Patients可能与Appointment具有可导航关联,而Doctor也具有与Patient或其他类型的 间接导航性 < / strong>。

答案 1 :(得分:0)

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

在概念模型中,我们不关心“患者班级是否了解医生班级”之类的问题。相反,我们只是对两个类之间存在关联这一事实进行建模。

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

这是否取决于您将要构建的应用程序的要求,是否确实需要双向访问(带有计算价格)。