儿童班之间的组合

时间:2014-06-11 06:22:09

标签: java inheritance uml composition

在子类之间建立组合关系是否可能或合理?

例如:

工作人员有两个孩子,服务员和经理(继承)。

管理员包含服务员(作文)列表。

或者有更好的方式来表达他们的关系吗?

3 个答案:

答案 0 :(得分:1)

可以在子类之间进行组合,有时可以“合理”,但在您的情况下,我只是将Waiter和Manager之间的关系建模为关联,如下图所示。enter image description here

答案 1 :(得分:1)

是的,(语法上)可以在任何两个类之间进行组合。如果合理与否,取决于每一个案例。

在你的情况下,由于作文背后的语义,它绝对不是一个好主意。

顾名思义,组合意味着整体关系,非常强大。 “整体”对“部分”有一个控制,创造它的实例,通常它们有点隐藏在外面的世界,最后摧毁它们。 “部分”往往不是在“整体”的背景下存在,除了参与“整体”之外没有任何功能。

可能的例子:House and Window,Invice和InvoiceItem,Body and Head等。

请注意,即使这些示例在不同的上下文中也可能需要不同类型的关系(例如,在机器人制造软件中,Body和Head可以与其他一些关系相关联,因为Head可以独立于Body而存在:)。 / p>

回到你的问题,我会使用 Manager和Waiter之间的简单关联。这种关系的性质较弱,服务员当然可以脱离其经理的背景,经理可能对服务员有一定的控制权,但它可能无法控制他的生命周期。

我建议您也使用尽可能有意义的关系名称。

  

管理员包含服务员列表

不是很准确甚至误导(这就是为什么你最初想要使用构图的原因)。经理不控制服务员,他可能是“掌管”,或他的老板或其他什么。无论如何,我更喜欢使用关联角色,而不是关系名称,更正式。

这样的事情:

enter image description here

Manager和Waiter之间的另一个可能的关系是聚合。它的语义介于普通关联和组合之间,通常描述了一种群体成员之间的关系。在这种情况下,它可能是有道理的,但定义是个人品味的问题。

第二版(见kiwiron的回答和评论。

这个想法是区分个人的个人和就业方面。每个人只有一个“当前”位置,但它可以很容易地改变,甚至保持现有的位置并“重复使用”它们。

这解决了上述答案中解释的问题。

enter image description here

哪种解决方案最适合您的情况,只能由您自己决定。 :)

答案 2 :(得分:1)

我认为基本的班级组织是不正确的。服务员可以成为经理,反之亦然。这表明Waiter和Manager都是由员工扮演的角色,这些角色是时间限制的。在这些条件下不应使用继承。

我怀疑是经理角色有一个服务员名单 - 而不是经理人员。 (即如果经理辞职,服务员仍将在替换经理的名单中)

尝试谷歌搜索"彼得科德"。他的数据建模技术改变了我对数据建模世界的看法。