面向关联如何在继承的 classes 中工作? (uml class 图)

How do oriented associations work within inherited classes? (uml class diagram)

我正在尝试理解其中一个 uml 测试题。 base 和 inherited classes 之间的关联是不同的,但是 do inherited classes 也继承了 base classes 之间的关联,我的意思是,do inherited classes 实际上有两个协会?

我也有不同的说法,我需要从中选择正确的。正确答案是A,但我不明白为什么A正确,其他不正确,所以如果可以的话,请解释每一个陈述。

A) ConcreteSubject class 的一个实例可能引用了零个或多个 Observer 类型的对象。

B) Observer class 的每个实例都恰好引用了 Subject class 的一个实例。

C) Subject class 的每个实例都恰好引用 Observer class.

的一个实例

D) ConcreteSubject class 的实例不能引用任何其他 class.

的实例

E) ConcreteObserver class 的一个实例可能引用了 ConcreteSubject class.

的零个或多个实例

谢谢!

[这个问题和答案有望给大学教师带来一些压力,让他们关心 exam/quiz 问题的质量。]

首先,重要的是要注意 class 图有几个缺陷。角色名称 "subject" 和 "object" 位于错误的(相反的)关联端。然后,如您所想,subject-objects 关联已被复制,因为它是继承的。

题目中,答案A、B均正确,其他均错误。这直接来自阅读 one-to-many subject-objects 关联的多重性约束。

顺便说一句,答案选项 B 和 C 的措辞有点缺陷:说 "each instance of the Observer (or Subject) class" 可能会造成混淆,因为这些 classes 是抽象的(用斜体字表示),这意味着他们没有自己的(直接)实例。然而,在一般意义上,可以说它们确实有实例,即它们的具体子classes的所有实例。因此,这两个答案选项令人困惑。但不使用混淆题是任何一种考试的重要公平要求。

我猜你的老师认为答案 B 是错误的,因为它是关于抽象 classes 观察者和主题的实例。但是,在目前的形式下,答案 B 是正确的。如果将其改写为 "each direct instance of the Observer (or Subject) class".

,那只会是不正确的

答案 C 不正确,因为主题 class 的实例可能没有任何观察者 link(这由 0..* 多重表达式中的 0 暗示)。

答案 D 不正确,因为模型不包含任何此类约束(顺便说一句,这没有任何意义)。

答案 E 不正确,因为它与任何观察者必须准确观察一个对象的多重性约束相矛盾,由多重性表达式 1.

表示