首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用UML来表示双向关联?

如何用UML来表示双向关联?
EN

Stack Overflow用户
提问于 2021-10-02 08:53:23
回答 1查看 315关注 0票数 2

在阅读了"In UML class diagram can composition be bidirectional?“这个问题之后,我想知道双向共享/复合聚合的具体示例将如何在UML图上显示。具体来说,我感兴趣的是如何使用箭头和多重性来区分以下情况:

1)单向共享聚合(聚合)

代码语言:javascript
运行
复制
class Foo {
    // Can contain 0+ elements
    ArrayList<Bar> bars = new ArrayList<>();
    
    void addBar(Bar bar) {
        bars.add(bar);
    }
}

class Bar {...}

2)双向共享聚合(聚合)

代码语言:javascript
运行
复制
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)单向复合聚集(组合)

代码语言:javascript
运行
复制
class Foo {
    // Can contain 0+ elements
    ArrayList<Bar> bars = new ArrayList<>();

    void addBar() {
        bars.add(new Bar());
    }
}

class Bar {...}

4)双向复合聚集(组合物)

代码语言:javascript
运行
复制
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应该是简单明了的。我不知道如何表示双向关联,以及如何将它们与单向关联区分开来,因为双方都将具有多重性。图表必须包含多重性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-02 20:22:15

箭头被用来区分单向联想和双向联想。

  • 是一个单向的联想,它有一个箭头。
  • 一个双向的联想有两个箭头,两边各有一个。

通常,没有箭头的关联具有未指定的导航性。但是,按照惯例,这样的处理总是双向的。

要明确表示关联在某个方向上是不可导航的,您可以在非导航端显示一个十字,但这在实践中并不经常使用。

多重性和聚合类型与导航性无关。

例如,您的最后一个案例可以建模如下:

有关更多示例,请参见UML2.5规范,第11.5.5节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69415403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档