UML 2.5.1规范说明了关联最终所有权:
它说明了关联端可导航性:
我可以清楚地看到为什么类拥有的关联端是可导航的:
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)
解决方案是按照@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
在您自己的回答中,您声称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的,例如: :)