当前位置: 首页 > 知识库问答 >
问题:

在UML中,关联端如何可以是关联所有的和可导航的?

狄凯
2023-03-14

UML 2.5.1规范说明了关联最终所有权:

  • 点表示法用于表示关联结束所有权,其中点表示线另一端的Class拥有属性,其类型为点触及的Class。

它说明了关联端可导航性:

  • 箭头符号用于表示关联结束可导航性。根据定义,所有类拥有的关联端都是可导航的

我可以清楚地看到为什么类拥有的关联端是可导航的:

class A:
    def __init__(self, b):
        self.b = b  # class-owned

class B:
    pass

b = B()
a = A(b)
a.b  # navigable

然而,我更难弄清楚一个由关联所有(所以不是类所有)的关联端如何可以导航?

规范规定,关联可以用关联类表示:

AssociationClass可以被视为也具有类属性的关联,或也具有关联属性的类。

因此,我尝试用Python类实现关联(例如在SQL中,当关联结束时,关联通常是由关联所有的,则使用SQL关联表实现关联),但没有取得多大成功:

class A:
    pass

class B:
    pass

class A_B:  # association class
    def __init__(self, a, b):
        self.a = a  # association-owned
        self.b = b  # association-owned

b = B()
a = A()
a_b = A_B(a, b)
a.b  # not navigable (AttributeError)

共有2个答案

姚航
2023-03-14

解决方案是按照@qwerty_so和本文的建议,将关联链接设置为类的属性:

class A:
    def link(self, b):
        self.a_b = A_B(self, b)  # set attribute

class B:
    pass

class A_B:  # association class
    def __init__(self, a, b):
        self.a = a  # association-owned
        self.b = b  # association-owned

b = B()
a = A()
a.link(b)
a.a_b.b  # navigable
秦滨海
2023-03-14

在您自己的回答中,您声称A_B是一个关联类。这确实是一种有效的解释。

但这不是唯一的一个:

关联声明其类型符合或实现关联类型的实例之间可以存在链接。链接是一个元组,关联的每个memberEnd都有一个值,其中每个值都是其类型符合或实现末尾类型的实例。(第11.5.3.1节)

python类完全满足这个定义:它实现了相关类型之间的链接。事实上,它只提供了元组(抽象意义上)的功能。

模型的类不一定与实现类一一相关。建模意味着对世界采取一种观点。大象和盲人的故事告诉我们,通常有几种有效的观点。所以,由你选择一个最能帮助你解决问题的方法

附加说明:像A_B这样的类经常用于实现多对多关联。当涉及三元关联时,也存在类似的选择:一些人更喜欢将其视为与第三类关联的二元关联类。有些人更喜欢将其视为简单的N元关联。两者都可能通过在实现语言中使用类A\u B\u C来实现。

 类似资料:
  • 我多次偶然发现这个词,但我不理解它的含义。当我读《结社终结》时,我倾向于思考结社的类别。每个联想都有两个联想终点,这是真的吗?还是我们说的“联想终点”是指类的角色?我已经搜索了这个术语的更详细的解释,但我找到的一切都在uml图上。组织: 你可以在我的截图底部看到,query和qbuilder,每个类的角色,都是“关联endpoint”。我的问题是,如果通过“关联端”,我们指向每个类的角色,还是指向

  • 因此,我对UML图中的关联、聚合和组合有一些疑问。以下是一些场景: > 产品评审对产品评审的评级组成。这意味着对于每一个产品评审等级必须有产品评审?如果产品评审不存在,评审评级就没有意义。 客户NRIC协助推车和订货。我们不能使用聚合,因为如果客户不存在,购物车和订单也不存在。 有人能帮我检查一下我的关系是否正确吗?因为我对聚合和关联有点困惑,所以用关联来链接所有的表是好的吗。我不知道什么时候该用

  • 我想建模两个类之间的协变关联,每个类都可以专门化。我需要展示相关关联类的专业化。但我想避免我的模型可能意味着存在冗余关联(即,泛化之间和专门化之间的关联)。 我在UML类图中有一个和一个之间的许多关联。一个人可以参与几个合同,反之,一个合同可以涉及几个人。每个相关人员都在合同中扮演一个角色。一个人甚至可以多次参与同一合同中的不同角色: 从UML专门化中,我知道和继承了多对多关系。但是在与我的法律实

  • UML图中的可导航性示例是什么?我的教授提供了下图,但我似乎无法弄清楚:

  • 这就是我现在对关联、聚合和组合的理解。 协会 聚集 构成 我认为理解这些词的意思是没有意义的,除非我不能在实际代码中表示它。以上代码取自SO答案(如果以上代码错误,请告诉我)。 我的问题是闪烁。 1) 在类图中显示聚合和组合是否重要 2) 我使用了一个可以转换java的工具。将文件分类到类图中。类可视化工具,但我无法使此工具在类图中显示聚合或组合关系。这是工具的问题还是我不了解如何在代码中使用组合

  • 问题内容: jQuery中是否有一种方法可以从现有元素中获取所有CSS并将其应用于另一个元素而无需列出所有元素? 我知道如果它们是带有的样式属性都可以,但是我所有的样式都在外部样式表中。 问题答案: 迟了几年,但是这里有一个可以同时检索内联样式和外部样式的解决方案: 将jQuery对象传递给,它将返回一个对象,然后您可以将其插回jQuery的,例如: :)