定向关联如何在继承的类中工作? (uml类图)

时间:2019-05-10 12:21:59

标签: uml class-diagram

我正在尝试理解uml测试问题之一。基类和继承类之间的关联是不同的,但是继承类也继承基类之间的关联,我的意思是,继承类实际上有两个关联吗?

enter image description here

我也有不同的陈述,我需要从中选择正确的陈述。正确的答案是A,但我不明白为什么A正确而其他A则不正确,因此,请尽可能解释每句话。

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

B)Observer类的每个实例都有对Subject类的一个实例的引用。

C)Subject类的每个实例都有对Observer类的一个实例的引用。

D)ConcreteSubject类的实例不能对任何其他类的实例进行任何引用。

E)ConcreteObserver类的实例可能引用了零个或多个ConcreteSubject类的实例。

谢谢!

1 个答案:

答案 0 :(得分:2)

[此问题和答案有望给大学教师施加一定的压力,使其要关心他们的考试/测验问题的质量。]

首先,重要的是要注意类图有几个缺陷。角色名称“主题”和“对象”在错误的(相反的)关联端。然后,正如您想知道的那样,主题-对象关联已被复制,因为它是继承的。

关于这些问题,答案A和B都是正确的,而其他答案都是错误的。这直接是通过阅读一对多主体-客体关联的多重性约束得出的。

顺便说一句,答案选项B和C的措词有点缺陷:说“观察者(或主题)类的每个实例”可能会令人困惑,因为这些类是抽象的(用斜体名称显示),这意味着它们没有自己的(直接)实例。但是,从一般意义上讲,可以说它们确实具有实例,即其具体子类的所有实例。因此,这两个答案选项令人困惑。但是,对于任何类型的考试,不要使用令人困惑的问题,这是一个重要的公平要求。

我想您的老师认为答案B是错误的,因为它与抽象类Observer和Subject的实例有关。但是,按照目前的形式,答案B是正确的。仅当将其改写为“观察者(或主题)类的每个 direct 实例”时,它才是错误的。

答案C不正确,因为Subject类的实例可能没有任何观察者的链接(这由0..*多重性表达式中的0表示)。

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

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

相关问题