首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当一个类与两个类相关联时,多对一的多重性

当一个类与两个类相关联时,多对一的多重性
EN

Stack Overflow用户
提问于 2015-10-01 22:31:41
回答 2查看 719关注 0票数 2

上下文:我有一个抽象类Student。从这个类中,我派生出三个具体的类-- SchoolStudent,UnderGradStudent,UnderGradStudent我还有一辆车辆。一名在校学生必须是而不是驾驶一辆车,然而,一名本科生或一名研究生可能驾驶vehicle.But,也可能不驾驶vehicle.But--每一辆车都必须由某人驾驶,因此 vehicle 类指的是学生。

问题:我有、UnderGradStudent和Vehicle类之间的关联,以及PostGradStudent和Vehicle之间的另一个关联。然而,我对这种多样性感到有点困惑。

就我所理解的问题而言,UML类图应该如下所示:

然而,我怀疑上面的图表表明,每个UnderGradStudent车辆将有一个PostGradStudent.和一个PostGradStudent.。

上面的图表对我想要的对应上下文的模型是正确的吗?

EN

回答 2

Stack Overflow用户

发布于 2015-10-02 02:41:44

正如您已经绘制了这个UML图一样,它暗示(但没有正确地说) Vehicle必须同时由一个UnderGradStudent和一个PostGradStudent驱动。它还意味着UnderGradStudent可以驱动任意数量的VehiclePostGradStudent可以驱动任意数量的Vehicle(同时)。我不认为这是你的本意。我之所以说“暗示”,是因为你在一端覆盖了两个联想。最后我检查了一下,那是无效的UML。

我想您想说的是,Vehicle可能由最多一个Undergrad StudentPostgrad Student驱动。为此,我建议采用以下模式:

上面写的是:

  • Student的有效实例必须是School StudentUndergrad StudentPostgrad Student的实例(而不是乘法分类)。
  • Allowed Driver的有效实例必须是Undergrad StudentPostgrad Student的实例(且不能乘以分类)。
  • 一个Vehicle可以由最多一个Allowed Driver驱动(一次)
  • Allowed Driver最多可驱动一个Vehicle (一次)

这描述了一个有效的情况,在任何时候,这是真正有用的。把它看作是一种评估电影中任何帧的有效性的方法。

如果你需要记录每一辆车的所有司机,你需要做很多改变。Person实际上扮演着Student的角色(通常是其他角色),这个角色可能会随着时间的推移而改变。您需要记录每个角色更改的开始和结束时间以及每个司机/车辆更改的开始和结束时间。把这看作是记录电影中的所有帧,但是没有能力表达电影中任何给定帧的有效性。当你放松多重性时,你就失去了这种能力。

通过合并我提到的所有关联,您可以获得“单帧”和“整部电影”方法的好处。

票数 2
EN

Stack Overflow用户

发布于 2015-10-02 13:51:54

通过在*Student类附近使用Vehicle中的0.1多重性,您的问题将很容易解决。这将告诉读者,两者都被允许拥有相关的可选车辆。为了避免同时使用同一辆车,您需要附加如下约束:

另外,你也可以这样做:

我不擅长写OCL,但您也可以将约束正规化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32897854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档