【问题标题】:Admin IsAn Employee relationship not suitable for inheritance?Admin IsAn Employee 关系不适合继承?
【发布时间】:2017-01-13 11:37:35
【问题描述】:

我有这个场景要通过 UML 类图建模,我不同意粗体的评论。

课程可以属于类别,每个类别都有自己的管理员,也是员工 (可以改变, 因此不适合通过继承解决)。

为什么Employee

【问题讨论】:

  • “可以更改”是什么意思?将要改变什么?我认为这种说法是模棱两可的。
  • @ThomasKilian 这意味着管理员可以成为员工(被降级),反之亦然(被提升)。

标签: inheritance polymorphism uml diagram class-diagram


【解决方案1】:

虽然没有明确说明,但部分

不适合通过继承解决

提示你如何理解

可以更改

如果没有括号部分,可能是继承的重要部分来自这个部分

管理员,也是雇员

但是,您知道这可以更改(例如,将来可能会有外部管理员,或者管理部分可以排除在单独的公司中,因此管理员将不再是员工)。因此,您不能接受管理员是雇员的事实(即使现在它也可能在未来不再正确),因此您不能使用继承来模拟这种关系。

【讨论】:

  • 还是大量阅读茶叶。我会问 OP 引文的作者他的实际意思。不能根据推测进行设计。
  • @Ister 这是聪明的解释,尽管它只是提到“从员工管理员降级为员工员工”。我可以看到您演示的问题,但现在考虑预期的含义。引文的作者声称,问题是对象必须被铸造。我不同意,为什么这是一个问题?作者建议使用关联而不是继承,但同样,它是“IsA”关系。它可能有效,但在语义上感觉不对。
【解决方案2】:

考虑这个模型(我在这里合并了两个模型):

左管理员和右管理员有什么区别?左边继承了Employee的所有属性和操作,让Category可以访问。但这应该只能与Admin 部分进行交互。在正确的版本中,Admin 可以使其成为Employee-relation 私有,因此Category 无法访问它。

在任何情况下,pro-/demote 都需要通过从Category 中删除来处理。那么运行时呢?当您处理已继承的Admin 时,您只需在需要Employee 的所有操作中使用该对象。现在,当他不再是管理员时,必须做什么?你必须创建一个简单的Employee 并给他以前Admin 所需的部分。

在正确的情况下,您只需删除 Admin。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多