我希望通过以下方式理解面向对象的设计和UML编程:
class Car { /*+-----+ +-------+ | Car |<>---| Brand | +-----+ +-------+*/ private Brand brand; /*+-----+ 1 1 +-------+ | Car |◆----| Brand | +-----+ +-------+*/ /*Understood as composition (black diamond operator). That means if there is no car there can't be a gearbox (inside of the car).*/ private Gearbox gearbox; private String color; private int weight; private Brand brand_name; } class Brand { /*+-------+ 1 1..n +----------+ | Brand |<>----------| Location | +-------+ +----------+*/ List<Location> locations; //at least one location private String Skoda; private String BMW; private Location location; } class Location { private String US; private String EU; } class Gearbox { enmu Gearbox { automatic, manual } }
除了Gearbox不需要类包装(使用简单的枚举),实现是正确的,但是图表开始时是不正确的。
在您提议的实现中,您可以注意到您实际上将Location和Brand视为伪枚举;要么有意义地使用类,要么使用枚举。这种伪概念只是令人困惑。
在编写代码时尝试遵循Java命名约定(所以brandName而不是brand_name等)
1)与Gearbox无关
您不应该指定与枚举的关联(对于诸如String,int等原始类型相同),而是使用属性。
此外,你不应该知道enum文字的可见性(公共,私人,......)。事实上,UML甚至不允许您指定,因为枚举中的“属性”实际上是与类中的属性不同的概念。
2)brand_name是奇数
汽车是以一个品牌制造的,这个品牌有一个名字。但是,最好将品牌建模为具有name属性的单独实体,而不是具有“brand_name”关联或枚举。
如果您想保留brand_name“access”,您可以添加一个可以获得价值的方法,例如:
3)位置相同;位置可能比国家/地区具有更多属性;也许是地址,也许是联系点等等。所以把它当作另一个建模概念。
4)如果您没有指定它的含义,请不要使用共享关联
UML中的共享关联(空菱形)没有指定的含义,这使它变得灵活,但是如果你在没有指定含义的情况下使用它,它就没有任何意义。所以请改用关联。