多重关系中的UML关联类

多重关系中的UML关联类,uml,class-diagram,Uml,Class Diagram,我正在用UML制作一个类图,但是我找不到关于这个主题的信息。 我可以在几节课中上一节课吗? 下面是一个例子: 消息应该是用户和组之间以及用户和通道之间的关联类。 这是允许的还是有其他方法可以做到这一点? 谢谢大家! 这是一个非常有趣的问题 在第199页的图11.25“关联”中,第200页开始的§11.5.3.2“关联类”中,以及第220页开始的§11.8.2“关联类[类]中,均未说明一个类不能用于多个关联类 所以对我来说,这是允许的 但是警告,类别名称和协会名称必须相同,参见§11.5.3.

我正在用UML制作一个类图,但是我找不到关于这个主题的信息。 我可以在几节课中上一节课吗? 下面是一个例子:

消息应该是用户和组之间以及用户和通道之间的关联类。 这是允许的还是有其他方法可以做到这一点?
谢谢大家!

这是一个非常有趣的问题

在第199页的图11.25“关联”中,第200页开始的§11.5.3.2“关联类”中,以及第220页开始的§11.8.2“关联类[类]中,均未说明一个类不能用于多个关联类

所以对我来说,这是允许的

但是警告,类别名称和协会名称必须相同,参见§11.5.3.2协会类别第200页:

关联和类都是分类器,因此有一组共同的属性,比如能够拥有特征, 具有名称等。这些属性是从同一构造(分类器)多次继承的,并且不重复。 因此,AssociationClass只有一个名称,并且具有为类和 协会

然后,如果要创建关联类,则该类不能命名为消息,关联将发送消息

注:类和关联是NamedElement(第47页§7.8.9 NamedElement[抽象类]),一个给定名称可用于多个NamedElement,但要在同一命名空间中共存,两个NamedElement必须是可区分的。第49页§7.8.9.7操作:

isDistinguishableFrom(n:NamedElement,ns:Namespace):布尔值
查询isDistinguishableFrom()确定两个NameDelement是否可以在一个数据库中逻辑上共存 命名空间。默认情况下,如果(a)两个命名元素的类型都不是 或者(b)他们有不同的名字


然后,两个关联消息必须位于不同的名称空间中,因为它们具有相同的名称。

如果您希望消息是将用户连接到组和通道的UML关联类的实例,则可以将消息关联的一端属性连接到组和通道的联合UML类的实例

要构造联合类,请将其作为UML泛化的两个实例的一般结尾,并将其抽象。一个泛化的具体终点是组,另一个终点是通道。为了更清楚,将泛化放在一个{complete}的UML泛化集实例中。

什么是关联类? 在查看关联类的图形表示法时,我们可能会错误地认为关联类只是附加到关联的类

但社团类实际上是一个社团,同时也是一个类:

UML2.5.1/第11.5.3.2节:AssociationClass是一个关联的声明,它有自己的一组特性。AssociationClass既是一个关联又是一个类,它保留了两者的静态和动态语义

因此,在建模语义中,除了表示法之外,您不能将关联类与相应的关联分开。如果您还不确定,下面是规范中的下一句话:

AssociationClass描述一组对象,每个对象共享AssociationClass作为一种类所包含的相同特性、约束和语义规范,并对应于将AssociationClass实例化为一种关联的唯一链接

(链接是关联的实例,对应于“关联的每个成员端有一个值”的元组)

关联类二元性的结果是什么? 其结果是,同一个关联类不能存在于多个风格中,每个风格将关联不同的类集

虽然符号中没有任何内容阻止您添加一条点线,似乎将同一个类“附加”到两个不同的关联中,但该符号并不对应于有效的UML语义

选择 你的问题突出了一个有趣的设计问题。幸运的是,有很多方法可以解决这个问题。例如:

  • 用户
    类与抽象的
    目的地
    类相关联<代码>消息将是关联类<代码>目的地将专门化为
    香奈儿
    ,这两个组都将继承关联(无需以图形方式复制关联)。(编辑:如注释中的下划线所示,关联和关联类是同一个,它们必须具有相同的名称)
  • 忘了社团课吧。使
    消息
    成为与
    用户
    关联的普通类。还将其与
    香奈儿
    关联。如有必要,如果这两个关联相互排斥,则在它们之间添加一个
    {xor}
    约束
  • 您目前只与
    有多对多关联,而与
    频道
    没有关联,这一事实表明存在一些显著的差异,并且支持(2)而不是(1)

    不相关:在你当前的模型中有什么奇怪的东西? 无论关联类主题是什么,当前模型都会提出一些关于与
    组的多对多关联的问题:

    • 您的意思是多个用户可以向多个组发送相同的消息吗
    • 或者你的意思是,一个用户可以向一个组发送消息,而该组由多个用户组成
    在后一种情况下,您应该选择两个不同的关联:一个用于发送关联,另一个用于组成员关联(请参见上图中的红色关联)