【问题标题】:UML abstract classes?UML 抽象类?
【发布时间】:2018-10-27 23:21:42
【问题描述】:

所以我目前正在自学UML,我参加了一个在线测验以帮助加强我对它的理解。

提出的问题之一:

如何用 UML2 类图对以下情况建模:

“有多种不同的鸟类,例如黑鸟、画眉、 和八哥。”

两个可用的选项是:

顶部的图表正确(我明白为什么),但是底部的图表不正确。为什么是这样?既然这三只鸟继承自抽象类bird,符合任何抽象方法,不都是鸟吗?

【问题讨论】:

  • 也许是因为抽象的符号是把名字放在斜体中?
  • 简单的解释是测验创建者犯了一个错误,或者你没有提出整个问题(在这种情况下你犯了一个错误)。

标签: uml abstract-class


【解决方案1】:

我认为有两种可能的答案:

  1. 顶部在逻辑上不正确,因为您不能自己创建 Bird 的实例。鸟类是所有鸟类的抽象分类。您只能创建画眉、椋鸟和黑鸟。我不确定 Bird 实例会是什么样子,但它会是超自然的。

  2. 底部在语法上不正确,因为抽象约束应该应用在类的名称和类型之后。

就我个人而言,我认为我会放弃 #2(这是一个错误,谁在乎?)并专注于 #1,如果我从事鸟类业务,那就更重要了。

【讨论】:

【解决方案2】:

UML 2.5 规范在 p 上说。 98

Classifier 的 isAbstract 属性为真时,指定 Classifier 是抽象的,即没有直接实例:抽象 Classifier 的每个实例都应是其特化之一的实例。

因此,无论Bird 是否用关键字abstract 修饰都会导致无法/实例化它的限制。如果您需要 Bird 实例,请不要使用它。如果你想创建一个动物索引,你可能会有abstract Bird,它告诉你基本上需要在鸟类的描述中包含什么。但你不会自己描述它。

在您的情况下,这两个图表通常都是“正确的”。这仅取决于您没有正确解释的上下文。您可以同时满足要求,因为没有要求您不能实例化 Bird

【讨论】:

    【解决方案3】:

    测验中的要求是: 有多种不同的鸟类,例如。黑鸟、画眉和椋鸟

    但它并没有说明您应该掌握哪些鸟类信息。所以我的第一个假设是用户只会对类型感兴趣。

    UML 图:

    是满足此要求的有效解决方案。 测验中的两个选项也是有效的解决方案,具体取决于您如何看待需求。该要求给出了三个示例,这些示例都在两种解决方案中都明确建模。 “例如。”意味着可能有其他鸟类,第一个解决方案更好地描述了这一事实。在第二种解决方案中,您不能有不在示例列表中的“Bird”实例。

    但是这个解决方案只有在你可以有一些没有显示的属性和操作时才有意义 - 恕我直言,最低限度是跟踪鸟的类型 - 在大多数实现中从类名中检索它是非常尴尬的环境。

    我个人认为用你的测验中的例子来解释继承不是一个好方法。继承的实现成本很高(例如,在大多数编程语言中,每个继承的类都有单独的源代码文件),这种成本应该会给你带来一定的好处。当要描述的事物在属性和行为上不同并且您需要不同的实现时,通常会出现这种情况。 “黑鸟”和“蓝鸟”可能仅在颜色上有所不同(颜色属性是鉴别器)。恕我直言,在这种情况下最好有:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2021-12-17
      • 2021-04-09
      • 2015-02-23
      • 2018-09-09
      • 1970-01-01
      相关资源
      最近更新 更多