【问题标题】:How to model different variations of similar classes in an UML Class Diagram?如何在 UML 类图中对相似类的不同变体进行建模?
【发布时间】:2020-11-04 21:20:23
【问题描述】:

试图实现一个类图,但我不确定它应该如何正确完成。问题来了:

矿工可以开采金、银和煤(矿是同质的,总是包含一种类型)。此外,还有一些危险的地雷:例如一些可能会坍塌或具有放射性的地雷。

如何在类图上表示它?首先,我认为可以通过一个Mines 类来完成。通过概括,我可以定义可折叠和放射性地雷。但我无法决定如何处理不同的材料类型。那也应该是类还是 Mines 类中的属性?

【问题讨论】:

  • 如果子类具有比父类更多的属性或方法,则通常使用子类。根据您的描述,不清楚您为什么要对地雷进行子类化。想想您的示例中还有哪些其他类的对象以及它们之间的关系。

标签: uml class-diagram


【解决方案1】:

越简单越好。如果根据提取的物质在声明中没有特定的行为,那么只有一个 Mine 类就足够了,并且已知的可能物质列表枚举就足够了。因为矿山只生产一种物质,所以多重性为 1。

该声明没有说明该矿是否具有放射性和坍塌。

假设一个地雷既具有放射性又可以坍塌,您可以为每种危险使用一个属性:

也可以对危险和多重性使用枚举0..2,但也需要有一个约束,即每个危险最多出现一次,所以这不是一个简单的方法。

否则,如果一个地雷最多有一个危险,您可以再次使用多重性为 1 的枚举:

或使用多重性0..1

【讨论】:

  • 没有物质枚举怎么办?根据我的任务,我必须检查并计算收集到的资源,所以如果它们作为一个单独的对象而不是一个值来表现会很棒。
  • @Anonymous 为什么有一个枚举与检查和计算收集的资源不兼容,为什么有一个类不兼容?我看到你没有把所有的陈述都放在你的问题中,如果需要编辑它
  • 枚举是一种数据类型,就像整数一样。我建议在 Mine 类中定义一个属性 substance : Substance 并绘制从 Mine 到 Substance 的依赖关系(虚线箭头)。见stackoverflow.com/a/48898810/5483079
  • 我没有说枚举等价于整数,我试图说明枚举和整数都是数据类型。请参阅 UML 规范的第 10.2.3 节。
  • 是的,依赖是多余的。绘制它可能有助于强调枚举由类使用这一事实。
【解决方案2】:

对此进行建模的最佳方法是将矿山中的材料定义为枚举。枚举是一种数据类型,可以用来定义一个属性,如下:

从 Mine 到 Material 的依赖箭头是多余的,因为它已被用作属性类型这一事实暗示,但在更复杂的类图中,我发现轻松查看哪些枚举被使用是有帮助的哪些类。

我没有对各种类型的地雷进行泛化,因为子类不会有特殊的功能,所以我选择了最简单的解决方案。

我没有对危险进行概括,因为地雷可能会坍塌和放射性。

【讨论】:

  • UML 允许以类似符号的关联显示属性,即使它们不是关联的结尾。所以不需要添加多余的Dependency。只需使用可导航的关联符号即可。不幸的是,没有多少工具支持这一点。但是,在类和枚举之间定义关联是完全合法的。它没有添加任何语义,但至少它允许显示箭头。与依赖相反,当它删除属性时,它会消失。
  • @AxelScheithauer,感谢您的宝贵意见。我看到了关联而不是依赖的优势。就个人而言,我仍然更喜欢我的解决方案。与属性及其数据类型之间的关系相比,它可以更好地区分业务实体之间的关系。随意添加您自己对这个问题的答案。我认为将各种意见视为这个问题的答案会有很多附加值。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多