以下句子在编程语言(例如 java)中是否有相应的表示:
Arrow on both ends means bidirectional relation, where both classes know about each other
?
确切地说classes know about each other
?
以下句子在编程语言(例如 java)中是否有相应的表示:
Arrow on both ends means bidirectional relation, where both classes know about each other
?
确切地说classes know about each other
?
“相互了解”意味着参与关系的每个类的对象都持有对其相关方的引用。例如:(*)
class Dog {
private Person owner;
}
class Person {
private Dog[] dogs;
}
这将对应于人与狗之间的 1:Many 关联:
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
}
然而,相同的规则适用于双向访问。