上下文:我有一个抽象类Student。从这个类中,我派生出三个具体类SchoolStudent、UnderGradStudent、PostGradStudent。我还有另一堂课车辆。学校学生必须不驾驶车辆,但是本科生或研究生可能会也可能不会驾驶车辆。但是每辆车都必须由某人驾驶,因此车辆类引用了学生。
问题:我在 UnderGradStudent 和 Vehicle 类之间存在关联,并且在 PostGradStudent 和 Vehicle 之间存在另一个关联。然而,我对多重性有点困惑。
但是,我怀疑上图表明每辆车辆将有一个UnderGradStudent以及一个PostGradStudent。
上图对于我想要根据上下文建模的内容是否正确?
当您绘制此 UML 图时,它暗示(但没有正确表述)
Vehicle
必须由一个 UnderGradStudent
和一个 PostGradStudent
驱动。它还意味着 UnderGradStudent
可以驱动任意数量的 Vehicle
,并且 PostGradStudent
可以(同时)驱动任意数量的 Vehicle
。我不认为这就是你的意图。我说“暗示”的原因是你在一端重叠了两个关联。最后我检查了一下,这是无效的 UML。
我认为您想说的是,一个
Vehicle
最多可以由一个 Undergrad Student
或 Postgrad Student
驱动。这么说来,我推荐以下型号:
这句话的意思是:
Student
的有效实例必须是School Student
、Undergrad Student
或Postgrad Student
之一(并且不能多重分类)Allowed Driver
的有效实例必须是Undergrad Student
或Postgrad Student
之一(并且不能多重分类)Vehicle
最多可由一个 Allowed Driver
(一次)驱动Allowed Driver
最多可驾驶一辆 Vehicle
(一次)这描述了任何时间点的有效情况,这非常有用。将其视为评估电影中任何帧的有效性的一种方法。
如果您需要记录永远每辆车的所有驾驶员,您将需要进行许多更改。 A
Person
实际上扮演着 Student
的角色(通常在其他角色中),并且该角色会随着时间的推移而改变。您需要记录每次角色变更的开始和结束时间以及每次驾驶员/车辆变更的开始和结束时间。可以将其视为记录电影中的所有帧,但无法表达电影中任何给定帧的有效性。当你放松多重性时,你就会失去这种能力。
通过组合我提到的所有关联,您可以获得“单帧”和“整部电影”方法的好处。