编程级别的UML关联

时间:2013-08-16 23:15:20

标签: associations uml

对于以下句子,编程语言(如java)中是否有相应的表示形式: Arrow on both ends means bidirectional relation, where both classes know about each other

且确切classes know about each other

1 个答案:

答案 0 :(得分:1)

“彼此了解”意味着参与该关系的每个班级的对象都持有对其关联方的参考。 e.g:(*)

class Dog {
  private Person owner;
}

class Person {
  private Dog[] dogs;
}

这将对应于1:人与狗之间的多种关联:

  • 每个人拥有许多狗(如果狗阵列为空,可能没有狗)
  • 每只狗最多只拥有一个人(如果owner为空,则可能没有拥有者)。

请注意,双向性意味着写访问器必须确保两端的一致性。因此,例如,Dog.setOwner()还必须确保Person.dogs已正确更新(通过在Dog上调用适当的方法)。这是你为双向导航付出的代价。

如果您不需要双向导航,则可以删除其中一个参考。例如:

class Dog {
  //no reference to owner
}

class Person {
  private Dog[] dogs;
}

在此示例中,无法从Dog导航到其所有者:但Person.dogs的写入访问器相应更简单。

第h

-

(*)注意这是实现关联的事实方法。还有另一种方法:将关系声明为类本身。这种用法要少得多 - 虽然对于具有协会本身属性的关联类来说可以很方便;例如

class DogOwnership {
  private Person owner;
  private Dog dog;
  private License license; // license for this Person owning this Dog
}

但是,相同的规则适用于双向访问。