Admin IsAn员工关系不适合继承?

时间:2017-01-13 11:37:35

标签: inheritance polymorphism uml diagram class-diagram

我有这个场景是由UML类图建模的,我不同意粗体注释。

  

课程可以属于类别,每个类别都分配了自己的管理员,这也是员工 (可以改变,   因此不适合通过继承解决<​​/ strong>)。

为什么Employee&lt; | ==管理员不适合继承?我认为它显然是一个&#34;是一个&#34;关系,而不是&#34;有一个&#34;。他们可以&#34;切换&#34;通过双面铸造可以很容易地解决。额外的属性将被删除,缺失的属性将被初始化为NULL或一些默认值。

2 个答案:

答案 0 :(得分:1)

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

  

不适合通过继承来解决

为您提供了如何理解的提示

  

可以更改

如果没有括号部分,可以继承的重要部分来自此部分

  

管理员,也是员工

然而,您有信息可以更改(例如,将来可能有外部管理员或管理部分可以排除到单独的公司,因此管理员将不再是员工)。因此,您不能认为管理员是员工这一事实(将来它现在可能不再适用),因此您不能使用继承来模拟这种关系。

答案 1 :(得分:1)

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

enter image description here

左右管理员有什么区别?左侧具有Employee继承的所有属性和操作,使Category可以访问它们。但那应该只能与Admin部分互动。在正确的版本中,Admin可以将其Employee - 关系设为私有,因此Category无法访问它。

无论如何,必须通过从Category删除它来处理pro / / demote。那运动时呢?当您处理已继承的Admin时,您只需在需要Employee的所有操作中使用该对象。现在,当他不再是管理员时,必须做些什么?您必须创建一个简单的Employee并向他提供前Admin所需的部分。

enter image description here

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

enter image description here