我可以在 uml class 图中为 class 绘制多重专业化吗?

Can i draw a multiple specialization for a class in a uml class diagram?

我正在为我将在 oracle 中实现的数据库寻找 UMLclass 图。
在这个数据库中,我有一个 class 可以以不止一种方式专门化。 举个例子推理:有出版物class可以专门从事书籍和杂志,反过来它们可以是数字或硬拷贝。
考虑到我的第二个专业有大约 11 个 child?

,正确的表示方法是什么?

我想到了这个解决方案: 你认为这是正确的吗?一个出版物可以同时专业化为数字图书吗?这两个专精有重叠扔吗?

第一版问题

当然一个class可以被多个人继承(推广)。

A publication can be a digital book?

你的图中没有任何内容说明,因为:

  • Book ---|> Publication表示Book是Publication,不是Publication是Book

  • Digital ---|> Publication表示Digital是Publication,不是Publication是Digital

一种更接近 "Publication is a Digital Book" 的方法是反转继承方向:

出版物是一本书并且是一本数字书,但不完全是一本数字书,因为数字书和书是两个不同的classes

第二版问题

A publication can be specialized as digital book at the same time?

如果同时意味着由同一个实例答案是否定的,因为在你的图表中,一本书不能同时是一个数字, 因此一个实例不能既是 Book 的实例又是 Digital

的实例

您的解决方案完全可以。也许你应该重命名一些 类,比如 Digital Publication,因为有人可能认为 Digital 不是特殊的 Publication

为了让它变得更好,您应该考虑使用 Generalization Sets。目前,您的四个概括都是一个默认集,即使它们显示为两棵树。此默认设置重叠且不完整。这意味着,Publication 的实例可以同时是所有四个特化的实例,也可以是完全不同的实例。我认为为了您的目的,需要两个 Generalization Sets

  • PublicationKind 与 BookMagazine
  • PublicationMeans Digital PublicationHard Publication

两者都将标记为{disjoint, complete}属性。

多重泛化有其优点。明智地使用它。