对于以下句子,编程语言(如java)中是否有相应的表示形式:
Arrow on both ends means bidirectional relation, where both classes know about each other
?
且确切classes know about each other
?
答案 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
}
但是,相同的规则适用于双向访问。