【发布时间】:2020-10-13 05:50:32
【问题描述】:
我想了解使用共享线路将类连接在一起或仅通过其他类“连接”类之间的区别。这里有显着差异吗?如果类共享一条线,您是否特别试图传达正在从共享线上的每个其他类访问信息?
对于“一行中的三个对象”,我的意思是如下所示的布局(抱歉,我的图表是:
对于“共享线”,我指的是如下所示的布局:
【问题讨论】:
我想了解使用共享线路将类连接在一起或仅通过其他类“连接”类之间的区别。这里有显着差异吗?如果类共享一条线,您是否特别试图传达正在从共享线上的每个其他类访问信息?
对于“一行中的三个对象”,我的意思是如下所示的布局(抱歉,我的图表是:
对于“共享线”,我指的是如下所示的布局:
【问题讨论】:
访问权限的区别
在第一种情况下,Flat 的实例和 Tenant 的实例相互认识,并且独立于 Tenant 的实例和LeaseAgreement 的实例彼此认识。 Flat 的实例不能直接访问 LeaseAgreement 的实例,而 LeaseAgreement 的实例不能直接访问 Flat,只有在 租户 以任何方式(方法或公共属性)提供这些访问权限时,他们才能访问其他实例。
第二种情况有一个association-class,Flat和Tenant的实例更了解LeasingContract 表明它们是如何关联的。
知识差异
在第一种情况下,假设隐藏的多重性不是 1,拥有两个租金的租户与 Flat 的两个实例和 LeaseAgreement 的两个实例相关联,但在给定的模型允许将 LeaseAgreement 的正确实例与 Flat 的正确实例链接起来,这意味着该模型没有说明租赁协议是针对哪个平面编写的.
在第二种情况下没有歧义,每对实例 Flat 和 Tenant 都与(实际上抛出)LeasingContract
【讨论】:
下图中的符号称为关联类(请参阅this wiki)。基本上,它是1-* AC *-1 关系的快捷方式,其中 AC 连接两个类,因此您可以添加属性和操作。在您的示例中,AC 是Leasing contract,它将添加有关持续时间、付款等信息。两个* 取自AC 协会远端的* 左右。所以这相当于你的下图:
【讨论】: