我试图了解UML类图,但我不确定我是否... 让我们假设我们有一个像这样的UML类图(每个类中只显示必需的属性):
上面那个UML类图的java代码应该是这样的(如果我没错)
class Car {
private String color;
private int weight;
private Gearbox gearbox;
private Brand brand_name;
}
class Brand {
private String Skoda;
private String BMW;
private Location location;
}
class Location {
private String US;
private String EU;
}
class Gearbox {
enmu Gearbox {
automatic, manual
}
}
问题是:我是否正确?我能做得好吗?
答案 0 :(得分:4)
下面:
class Gearbox {
enmu Gearbox {
automatic, manual
}
}
最好是:
enum Gearbox { AUTOMATIC, MANUAL; }
将枚举包装到Java中的同名类中有 no 点。
从建模的角度来看,我也会将枚举用于定位和品牌。品牌类中还有 no 点,其中包含名为BMW或Skoda的字段。一辆汽车具有完全一个品牌的已知disjunkt可能性。并且存在用于表达这种情况的枚举。
您的实现(枚举事项除外)与图表匹配。是。但对我而言,正确性也意味着"大图片"解决了。正如所解释的那样:你的输入本质上是有缺陷的。你设法"正确"用Java源代码表达输入。所以你解决了任务(imho)。但在现实世界中,我会把你送回家,并让你先重新制作图表。
从那里开始,真正的答案是:首先查看UML图。这种方式没有意义。因此,不要盲目地实施给你的东西 - 挑战明显不一致的要求。
答案 1 :(得分:3)
除了Gearbox不需要类包装(使用简单的枚举)之外,实现是正确的,但是图表开头不正确。
在您提议的实施中,您可以注意到您实际上将位置和品牌视为伪枚举;要么有意义地使用类,要么使用枚举。这种伪概念只是令人困惑。
在编写代码时尝试遵循Java命名约定(所以brandName而不是brand_name等)
1)与Gearbox无关联
您不应该指定与枚举的关联(对于诸如String,int等原始类型相同),而是使用属性。
此外,您不应该为枚举文字提供可见性(公共,私有,...)。事实上,UML甚至不允许您指定,因为枚举中的“属性”实际上是与类中属性不同的概念。
2)brand_name是奇数
汽车是以一个品牌制造的,这个品牌有一个名字。但是,最好将品牌建模为具有name属性的单独实体,而不是具有“brand_name”关联或枚举。
如果您想保留brand_name“access”,您可以添加一个可以获得价值的方法,例如
3)位置相同;位置可能比国家/地区具有更多属性;也许是地址,也许是联系点等等。所以把它当作另一种建模概念。
4)如果您没有指定共享关联,请不要使用共享关联
UML中的共享关联(空菱形)没有指定的含义,这使它变得灵活,但是如果你在没有指定含义的情况下使用它,它就没有任何意义。所以请改用关联。
答案 2 :(得分:0)
我希望通过以下方式理解面向对象的设计和使用UML进行编程。:
var filedelete = Task.Run(() => File.Delete(filePath));