2

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

确切地说classes know about each other

4

1 回答 1

1

“相互了解”意味着参与关系的每个类的对象都持有对其相关方的引用。例如:(*)

class Dog {
  private Person owner;
}

class Person {
  private Dog[] dogs;
}

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

  • 每个人拥有许多狗(如果 Dog 数组为空,则可能没有)
  • owner每只 Dog 最多由一个 Person 拥有(如果为 null ,则可能没有所有者)。

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

如果您不需要两种方式导航,则可以删除其中一个参考。例如:

class Dog {
  //no reference to owner
}

class Person {
  private Dog[] dogs;
}

在这个例子中,不可能从 Dog 导航到它的所有者:但是 Person.dogs 的写访问器相应地更简单。

hth。

--

(*) 请注意,这是实现关联的事实上的方式。还有另一种方法:将关系声明为类本身。这很少使用 - 尽管对于具有关联本身属性的关联类很方便;例如

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

然而,相同的规则适用于双向访问。

于 2013-08-17T13:27:55.427 回答