汽车类和道路类之间的关系 - UML和Java代码

时间:2016-05-19 18:14:02

标签: java associations uml aggregation visio

我试图理解面向对象世界中的类之间的关系,并遇到了各种术语,如:

AssociationAggregationCompositionDependencyGeneralizationRealizationUsing(可能有更多的列表,我很快就会遇到)。

我遇到了以下UML图:

enter image description here

在这里,我们有两个不同的类(和对象),CarRoad,以及连接它们的连接符号(我相信它是定向关联符号,根据MS Visio)。

所以这意味着CarRoad类之间存在某种关系(关联)。我对此有一些疑问,要理解这种关系:

1)如何将这种关系转换为Java类?我很难理解CarRoad将如何拥有"某些代码"连接它们?

2)此图中*0..1的含义是什么?通常我在实体关系图(在DB中)中看到过这些。

任何理解这一点的指针都会有很大的帮助。

4 个答案:

答案 0 :(得分:3)

Car对象将引用Road对象(换句话说,是Road类型的实例变量)。 Road对象还具有Car对象的列表(或List)。第一句代表类之间的0..1关系;请注意,参考可能为空(汽车在0路上)或不是(汽车在一条路上)。 Road对象中的列表代表*关系 - 0路或更多车辆在路上。

答案 1 :(得分:1)

1)太宽泛而无法回答。 UML和Java都是具有良好定义结构的形式语言,但是没有标准化的方式在Java中表达任何特定的UML概念,反之亦然。因此,任何答案都是基于意见的。

此外,关联是一种松散定义的关系。 UML还有许多其他更严格的定义(你已经列出了一些),这些更容易翻译成源代码。

因为存在更严格定义的关系,正确读取关联关系的方式是“这两个事物以某种方式相关,但不能太紧密以至于一个包含另一个,或者一个人使用另一个,或者是依赖于另一个。“这些概念都有自己的连接器,建模者有意识地决定不使用它们。

2)*表示“任意数字”,0..1表示“零或一”,通常称为“可选”。因此,drivesOn关系将任意数量的汽车与可选道路相关联。

据推测,这应该被认为是指汽车可能在道路上行驶,但从不在一辆道路上行驶,并且道路上可能有任意数量的汽车行驶。

在理解UML方面,这是一个非常糟糕的例子,所以不要试图从中读取太多内容。

答案 2 :(得分:1)

您的问题确实有简单的答案:

  1. 您的单向多对一关联drivesOn以下列方式以单值引用属性的形式表示(或转换为)Java:

    class Car {
      int passengers;
      Road drivesOn;
    }
    
  2. 符号*和0..1表示多重性:*表示 许多 (或无界)和0..1意味着 最多只有一个 ,所以你的模型会产生两个多重性声明:(1)一个Car MoveOn最多一个Road,(2)一个Road有很多Cars在它上面移动

  3. 用于阅读更多关于关联和多重性含义以及它们如何用Java表达的指针是我的书章Reference Properties and Unidirectional Associations

答案 3 :(得分:0)

这就像许多汽车可以在没有道路或最多一条道路上相关联。换句话说,许多汽车可以在一条道路上驾驶或根本不在任何道路上驾驶