在子类之间建立组合关系是否可能或合理?
例如:
工作人员有两个孩子,服务员和经理(继承)。
管理员包含服务员(作文)列表。
或者有更好的方式来表达他们的关系吗?
答案 0 :(得分:1)
可以在子类之间进行组合,有时可以“合理”,但在您的情况下,我只是将Waiter和Manager之间的关系建模为关联,如下图所示。
答案 1 :(得分:1)
是的,(语法上)可以在任何两个类之间进行组合。如果合理与否,取决于每一个案例。
在你的情况下,由于作文背后的语义,它绝对不是一个好主意。
顾名思义,组合意味着整体关系,非常强大。 “整体”对“部分”有一个控制,创造它的实例,通常它们有点隐藏在外面的世界,最后摧毁它们。 “部分”往往不是在“整体”的背景下存在,除了参与“整体”之外没有任何功能。
可能的例子:House and Window,Invice和InvoiceItem,Body and Head等。
请注意,即使这些示例在不同的上下文中也可能需要不同类型的关系(例如,在机器人制造软件中,Body和Head可以与其他一些关系相关联,因为Head可以独立于Body而存在:)。 / p>
回到你的问题,我会使用 Manager和Waiter之间的简单关联。这种关系的性质较弱,服务员当然可以脱离其经理的背景,经理可能对服务员有一定的控制权,但它可能无法控制他的生命周期。
我建议您也使用尽可能有意义的关系名称。
管理员包含服务员列表
不是很准确甚至误导(这就是为什么你最初想要使用构图的原因)。经理不控制服务员,他可能是“掌管”,或他的老板或其他什么。无论如何,我更喜欢使用关联角色,而不是关系名称,更正式。
这样的事情:
Manager和Waiter之间的另一个可能的关系是聚合。它的语义介于普通关联和组合之间,通常描述了一种群体成员之间的关系。在这种情况下,它可能是有道理的,但定义是个人品味的问题。
第二版(见kiwiron的回答和评论。
这个想法是区分个人的个人和就业方面。每个人只有一个“当前”位置,但它可以很容易地改变,甚至保持现有的位置并“重复使用”它们。
这解决了上述答案中解释的问题。
哪种解决方案最适合您的情况,只能由您自己决定。 :)
答案 2 :(得分:1)
我认为基本的班级组织是不正确的。服务员可以成为经理,反之亦然。这表明Waiter和Manager都是由员工扮演的角色,这些角色是时间限制的。在这些条件下不应使用继承。
我怀疑是经理角色有一个服务员名单 - 而不是经理人员。 (即如果经理辞职,服务员仍将在替换经理的名单中)
尝试谷歌搜索"彼得科德"。他的数据建模技术改变了我对数据建模世界的看法。