2017-10-07 108 views
2

我已经搜索了很多小时的过去几个学期,试图确保我正确地向学生展示这个过程。我没有发现任何东西显示这种特殊关系。这个学期,我想知道我做得正确。我们有一个抽象类,Player和两个扩展它的具体类(Pitcher和PositionPlayer)。然后我们有一个类,团队宣布一个MapUML建模多态 - 依赖于抽象类

<Integer, Player> 

对我来说似乎是团队依赖于播放器(抽象类),但我想依赖可以显示的子类。请告诉我哪些是正确的,顶部还是底部? (我的UML编辑器不会做斜体,因此标签)。预先感谢您的帮助。

enter image description here

+0

不知道你为什么删除了你的评论。我设法看到它,所以我会回应。如果'Team'需要将'Player'降级为'Pitcher',那么底部是好的。我说的是这是不好的设计,请参阅https://en.wikipedia.org/wiki/Downcasting#Criticism页面底部有一些有用的链接。 – Oleg

+0

有点相关的是[this](https://cseducators.stackexchange.com/search?q=uml)。 (当然,这听起来像是整个网站在任何情况下都可能与您有关)。 –

回答

1

两者都是正确的。顶部更一般,底部更具体。但是两者都是一样的。

以下是显示您将在哪里使用设计的下半部分。如果您有第三个Player子类,其中Team不依赖于您,请使用较低的表示形式 - 不依赖于新的子类。

enter image description here

可能并不十分逼真,但可能是一些虚拟的游戏星座。

+0

谢谢!我非常感谢你的时间。也很高兴知道我没有以我教过的方式误导任何人。 – AApplin

+0

“团队”如何依赖它不使用的类而对此一无所知?即使这是正确的UML(相信你),这不是一个明智的方式来传达有意义的关系,没有人应该这样做@AApplin和标准应该改变。 – Oleg

+0

@Oleg“小丑”只是一个“玩家”。不是“团队”的一部分,但在(未显示)完整域中,他可能扮演另一个角色。只是作为一个“玩家”而不是团队合作伙伴。 –

-1

如果团队包含MAP类型的属性,对我而言,这意味着团队包含一个玩家列表,每个玩家列表由一个ID标识。

如果团队包含基数为0..n的Player类型属性,则表示该团队与Player关联。

由于每个玩家都由一个整数标识,对我而言,这是一个合格的关联。

enter image description here

+0

道歉,玩家的基数应该是1,对于一个id,有一个玩家。 – granier

+0

如果这是一个答案,请以实际将其清楚的方式进行编辑。如果这是一个问题,请提出另一个问题。 – Oleg

+0

这是问题的答案,事实上,对我来说,依赖并不是正确的答案,因为它是一个关联...我更喜欢把答案写成一个问题,对我来说,这是更友好的。 – granier