在阅读了"In UML class diagram can composition be bidirectional?“这个问题之后,我想知道双向共享/复合聚合的具体示例将如何在UML图上显示。具体来说,我感兴趣的是如何使用箭头和多重性来区分以下情况:
1)单向共享聚合(聚合)
class Foo {
// Can contain 0+ elements
ArrayList<Bar> bars = new ArrayList<>();
void addBar(Bar bar) {
bars.add(bar);
}
}
class Bar {...}
2)双向共享聚合(聚合)
class Foo {
// Can contain 0+ elements
ArrayList<Bar> bars = new ArrayList<>();
void addBar(Bar bar) {
bars.add(bar);
bar.setFoo(this);
}
}
class Bar {
Foo foo;
void setFoo(Foo foo) {
this.foo = foo;
}
}
3)单向复合聚集(组合)
class Foo {
// Can contain 0+ elements
ArrayList<Bar> bars = new ArrayList<>();
void addBar() {
bars.add(new Bar());
}
}
class Bar {...}
4)双向复合聚集(组合物)
class Foo {
// Can contain 0+ elements
ArrayList<Bar> bars = new ArrayList<>();
void addBar() {
bars.add(new Bar(this));
}
}
class Bar {
Bar foo;
Bar(Foo foo) {
this.foo = foo;
}
}
案例1和2应该是简单明了的。我不知道如何表示双向关联,以及如何将它们与单向关联区分开来,因为双方都将具有多重性。图表必须包含多重性。
发布于 2021-10-02 20:22:15
箭头被用来区分单向联想和双向联想。
通常,没有箭头的关联具有未指定的导航性。但是,按照惯例,这样的处理总是双向的。
要明确表示关联在某个方向上是不可导航的,您可以在非导航端显示一个十字,但这在实践中并不经常使用。
多重性和聚合类型与导航性无关。
例如,您的最后一个案例可以建模如下:
有关更多示例,请参见UML2.5规范,第11.5.5节。
https://stackoverflow.com/questions/69415403
复制相似问题