类的特化,继承父类的所有属性和关联。专业化可以不参与父类的关联吗?
示例:员工和他的经理专业化。经理可以参加连接员工和公司的协会吗?
确实,专业化继承了其父类的关联。
因此,如果
Employee
与 Employer
具有关联(例如,一名雇员有 1 个雇主,而一名雇主有 * 个雇员),并且如果 Manager
是 Employee
的专业化,则它会继承相同的关联。
有一些方法可以更改继承的元素:
通过绘制
Manager
和Employer
之间的关联来直观地呈现两者。在第一种情况下,您将在关联末端添加一个 {redefines ...}
装饰,在第二种情况下,您将在两个关联之间绘制一个泛化箭头(并非每个工具都接受这一点,尽管它是合法的 UML)。您可以在此处找到一些专门协会的示例。这篇研究论文全面概述了这种高级 UML 功能。
您可能想知道:如果有一个专门的或重新定义的关联,它有什么帮助?好吧,只需将重数更改为
0..0
。
话虽如此,这看起来很丑。这给人带来的不好的感觉同时也是一个很好的提醒:这可能不是一个好主意。事实上,里氏替换原则告诉我们,专用类型的元素应该可以与超级类型的元素互换使用(即,每当你与员工一起做某事时,你可以与经理一起做)。而这个设计就打破了这个原则。
更一般地说,你可能会在 UML 中很好地设计那些有不好的 OOP 设计的东西,但你不一定应该这么做。