首先,我对UML中的类之间的关联关系感到非常困惑,因为存在单向和双向关联。
我画了一个简单的例子,
但是我在网上查找了一些示例,发现大多数示例都使用了Patient类和Doctor类之间的单向关联。
当我解释该图时,我会这样解释:“患者阶层知道医生阶层,但医生阶层不知道患者阶层”。但这仍然没有什么意义,因为为什么医生阶层不知道患者类别?
有人可以向我详细解释吗?非常感谢。
答案 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)。
在概念模型中,我们不关心“患者班级是否了解医生班级”之类的问题。相反,我们只是对两个类之间存在关联这一事实进行建模。
关于A
和B
之间的关联,A
“知道” B
的问题更好地表述为:{{1 }}是否需要直接访问A
的实例?在这种情况下,我们将添加一个引用属性B
,以便能够直接访问/检索所有关联的A::b
对象。可以通过在关联的B
侧放置一个小圆点(在UML中称为“关联最终所有权圆点”)来在类图中表示这一点。
这是否取决于您将要构建的应用程序的要求,是否确实需要双向访问(带有计算价格)。