在 Java 中实现 uml 图
Implement uml Graph in Java
What is a reasonable implementation of this uml graph in java?
其中 Enumeration,Eiche,Buche,Esche 是德语,意思是枚举、橡树、山毛榉、白蜡木。我的尝试如下
public class Material{
public static enum material{
oak, beech, ash
}
public int[] materialCost ={1,2,3};
}
问题是在我的作业练习中的某处我发现 Table(Material.oak)
所以我知道我的尝试一定是错误的。有人可以帮忙吗?
实际上,您可以与普通 类 非常相似地定义枚举类型的属性:Oracle docs
所以在你的例子中你可以做类似
的事情
public enum Material {
EICHE(1),
BUCHE(2);
private final int cost;
Material(int cost) {
this.cost = cost;
}
int cost() {
return this.cost;
}
}
...
Material oak = Material.EICHE;
System.out.println("One unit of Eiche costs " + oak.cost());
简而言之
public enum Material {
Eiche,Buche,Esche;
public int materialCost; // public access is not great, but that's the model
}
基于UML图的详细论证
UML 关键字 «enumeration»
在 Java 中对应于 enum
。
UML 枚举文字,如Eiche
、Buche
、Esche
,一般不加下划线,放在单独的隔间里,只有文字。这个隔间应该以图形方式放置在操作下方,操作本身是从属性中分离出来的。您的图形符号不尊重这种用法,因此需要仔细查看以避免混淆。 UML class 中带下划线的元素是静态元素,但在枚举的特定情况下,下划线表示“实例规范”(对不起 UML 行话),即一些常量枚举值。
materialCost
没有下划线。因此,这是一个正常的 public 属性。有些语言不允许枚举的附加属性和操作,但 UML 允许。幸运的是 Java 也是如此。我们不知道这个属性的类型,所以你可以在实现中选择相关的; int
似乎还可以。 materialCost
不应该是数组:在 UML 中,数组需要大于 1 的重数,因为您可以有多个元素。在图中没有明确的多重性,这意味着(根据 UML 规范)多重性恰好为 1。
最后但同样重要的是,materialCost
可以根据 UML 模型随时完美修改,因为它后面没有 {readOnly}
。这也不是操作,因为缺少 ()
补充说明
在 UML 中,枚举是一种值类型:如果两个实例具有相同的值,则它们被视为相同。
在 Java 中,它有点棘手,因为 the difference between ==
and .equals()
和 ==
与枚举文字比较时的特殊保证,并且没有其他字段。对于这种混合枚举,有些谨慎似乎是可取的。
What is a reasonable implementation of this uml graph in java?
其中 Enumeration,Eiche,Buche,Esche 是德语,意思是枚举、橡树、山毛榉、白蜡木。我的尝试如下
public class Material{
public static enum material{
oak, beech, ash
}
public int[] materialCost ={1,2,3};
}
问题是在我的作业练习中的某处我发现 Table(Material.oak)
所以我知道我的尝试一定是错误的。有人可以帮忙吗?
实际上,您可以与普通 类 非常相似地定义枚举类型的属性:Oracle docs
所以在你的例子中你可以做类似
的事情public enum Material {
EICHE(1),
BUCHE(2);
private final int cost;
Material(int cost) {
this.cost = cost;
}
int cost() {
return this.cost;
}
}
...
Material oak = Material.EICHE;
System.out.println("One unit of Eiche costs " + oak.cost());
简而言之
public enum Material {
Eiche,Buche,Esche;
public int materialCost; // public access is not great, but that's the model
}
基于UML图的详细论证
UML 关键字 «enumeration»
在 Java 中对应于 enum
。
UML 枚举文字,如Eiche
、Buche
、Esche
,一般不加下划线,放在单独的隔间里,只有文字。这个隔间应该以图形方式放置在操作下方,操作本身是从属性中分离出来的。您的图形符号不尊重这种用法,因此需要仔细查看以避免混淆。 UML class 中带下划线的元素是静态元素,但在枚举的特定情况下,下划线表示“实例规范”(对不起 UML 行话),即一些常量枚举值。
materialCost
没有下划线。因此,这是一个正常的 public 属性。有些语言不允许枚举的附加属性和操作,但 UML 允许。幸运的是 Java 也是如此。我们不知道这个属性的类型,所以你可以在实现中选择相关的; int
似乎还可以。 materialCost
不应该是数组:在 UML 中,数组需要大于 1 的重数,因为您可以有多个元素。在图中没有明确的多重性,这意味着(根据 UML 规范)多重性恰好为 1。
最后但同样重要的是,materialCost
可以根据 UML 模型随时完美修改,因为它后面没有 {readOnly}
。这也不是操作,因为缺少 ()
补充说明
在 UML 中,枚举是一种值类型:如果两个实例具有相同的值,则它们被视为相同。
在 Java 中,它有点棘手,因为 the difference between ==
and .equals()
和 ==
与枚举文字比较时的特殊保证,并且没有其他字段。对于这种混合枚举,有些谨慎似乎是可取的。