如何在UML类图中为相似类的不同变体建模?

问题描述

尝试实现类图,我不确定应该如何正确完成。这是问题所在:

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

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

解决方法

越简单越好。在声明中没有特定行为,取决于所提取的物质,仅拥有一个矿井就足够了,已知的可能物质列表就足够了。因为一个地雷只产生一种物质,所以多重度是1。

该声明没有说明地雷是否可以同时具有放射性和塌陷。

假设地雷既可能具有放射性也可能崩溃,则可以对每种危险使用一个属性:

enter image description here

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

否则,即使是可能性较小的地雷最多也具有一种危险,您可以再次使用多重性为1的枚举:

enter image description here

或具有多重性0..1

enter image description here

,

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

enter image description here

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

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

我并没有将危险归纳为一种概括,因为地雷可能会同时塌陷并具有放射性。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...