gpt4 book ai didi

多重关系中的UML关联类

转载 作者:行者123 更新时间:2023-12-03 17:09:11 25 4
gpt4 key购买 nike

我正在用 UML 制作类图,但找不到有关此主题的信息。
我可以在多个协会类(class)中开设一个类(class)吗?
这是一个例子:
example model
消息应该是用户和组之间的关联类,也是用户和 channel 之间的关联类。
这是允许的还是有其他方法可以做到这一点?
谢谢你!

最佳答案

什么是关联类?
在查看关联类的图形符号时,我们可能会误以为关联类只是一个附加到关联的类。
但关联类实际上是一个关联,同时也是一个类:

UML 2.5.1 / Section 11.5.3.2: An AssociationClass is a declaration of an Association that has a set of Features of its own. An AssociationClass is both an Association and a Class, and preserves the static and dynamic semantics of both.


所以在建模语义上,除了符号之外,你不能把关联类和对应的关联分开。如果您还不相信,请看规范中的下一句:

An AssociationClass describes a set of objects that each share the same specifications of Features, Constraints, and semantics entailed by the AssociationClass as a kind of Class, and correspond to a unique link instantiating the AssociationClass as a kind of Association.


(链接是关联的实例,对应于具有“关联的每个成员一个值”的元组)
关联类二元性的后果是什么?
结果是相同的关联类不能存在于多种风格中,每种风格都会关联不同的类集。
虽然符号中没有任何内容阻止您添加虚线以将同一类“附加”到两个不同的关联 as Bruno explains ,这种表示法不会对应于有效的 UML 语义。
备择方案
您的问题强调了一个有趣的设计问题。幸运的是,有很多方法可以解决它。例如:
  • User类与抽象 Destination 相关联类(class)。 Message将是协会类。 Destination将专门化为 GroupChanel这都将继承关联(无需以图形方式复制关联)。 (编辑:如评论中 Axel Scheithauer 下划线所示,关联和关联类是一回事,它们必须具有相同的名称)

  • enter image description here
  • 忘记关联类。制作 Message一个普通的类,与 User 相关联.也与 Group 相关联和 Chanel .如有必要,添加 {xor}如果它们是互斥的,则这两个关联之间的约束。

  • enter image description here
    您目前仅与 Group 有多对多关联的事实而不是 Channel ,表明存在一些显着差异,并且会支持(2)而不是(1)。
    不相关:您当前的模型中有什么奇怪的东西?
    无论关联类主题如何,您当前的模型都提出了一些关于与 Group 的多对多关联的问题。 :
  • 您的意思是多个用户可以向多个组发送相同的消息吗?
  • 还是您的意思是一个用户可以向一个组发送消息并且该组由多个用户组成?

  • 在后一种情况下,您应该选择 2 个不同的关联:一个用于发送关联,另一个用于组成员关联(参见上图中的红色关联)。

    关于多重关系中的UML关联类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67048791/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com