【问题标题】:Can i draw a multiple specialization for a class in a uml class diagram?我可以在 uml 类图中为一个类绘制多个专业化吗?
【发布时间】:2019-01-27 01:26:11
【问题描述】:

我正在为我将在 oracle 中实现的数据库绘制 UML 类图。
在这个数据库中,我有一个可以不止一种方式专门化的类。 举个例子推理:有可以专门研究书籍和杂志的出版物类,反过来它们可以是数字或硬拷贝。
考虑到我的第二个专业有十一个孩子,正确的表示方式是什么?

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

【问题讨论】:

  • 没有什么不对,但您似乎忽略并混淆了不同的概念。
  • 什么概念?请告诉我我错在哪里。
  • 一本单独的书或杂志是我手里拿着的东西。个人数字或硬不是。仅这个标准就告诉我有些东西被混为一谈了。
  • 从 Publication 继承的 Book and Magazine 是有意义的 -- Books and Magazines 是类型的 Publication。但是从 Publication 继承 Digital 和 Hard 对我来说没有意义,这更像是 Publication 的交付格式。我的出版物指的是一种可能是数字或硬的 格式

标签: database uml diagram class-diagram


【解决方案1】:

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

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

  • PublicationKind 与 BookMagazine
  • PublicationMeans 与 Digital PublicationHard Publication

两者都将使用属性 {disjoint, complete} 进行标记。

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

【讨论】:

    【解决方案2】:

    问题的第一个版本

    当然,一个类可以被多个继承(泛化)。

    出版物可以是电子书吗?

    您的图表中没有任何内容表明,因为:

    • Book ---|> Publication 表示书是出版物,而不是出版物是书

    • Digital ---|> Publication 表示数字是出版物,不是出版物是数字

    更接近“出版物是一本电子书”的方法是颠倒继承的方向:

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

    问题的第二个版本

    一个出版物可以同时专业化为数字图书吗?

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

    【讨论】:

    • 好的,我已经更正了我的最后一个答案。真正的问题是我是否可以同时拥有一个专门针对一本书和数字的出版物实例,或者这两个继承是否是脱节的。
    • 我永远不会提倡多重继承。
    • @ThomasKilian 幸运的是存在多重继承,但是这不是魔法,如果使用不当会产生一些问题。我也使用除法,甚至除以 0 可以追加或加法甚至溢出是可能的,我尊重地址,即使可能有非法访问等等等等等等。是的,我喜欢危险地生活^^
    • 我认为多重继承是一个“错误”的概念。两栖车辆不继承自船舶和汽车。这是不同的东西(一个新的类)。 MI有(也许)用途,但它经常引诱人们以错误的方式使用它。
    • 我同意 TK 的观点,多重继承很糟糕,尤其是在这种情况下,因为出版物比书籍或数字抽象。它可能适用于派生类型更具体/不那么抽象的情况。就目前而言,布鲁诺认为这有点奇怪。
    猜你喜欢
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多