对不起这个新问题,我是UML的新手。
系统图是这样的:
根据我所知的UML,此图中的任何类都不能拥有关联类的实例,因为它与它没有聚合关系。
这是否意味着在Java系统的实现中,基于图表,外部类必须拥有相关类的实例?
很抱歉,如果答案很明显。我花了好几个小时在头上试着。
答案 0 :(得分:1)
首先,术语。 @Daniel是对的,你没有关联类。但是,我不认为你意味着关联类:
这是否意味着在Java系统的实现中,基于图表,外部类必须拥有相关类的实例?
如果我理解正确,那就是你问题的核心。在实现术语中,哪个类有一个成员变量,其中包含对Associated Class
实例的引用列表?
再次 - 如果我理解正确 - 你的问题源于以下逻辑:
Aggregated/Composite PART Class
和Associated Class
之间的关系是一个简单的二元关联 - 而非聚合/复合。Associated Class
个实例的引用列表?如果那是对的,那么问题在于“所有权”的具体含义。虽然在UML中没有严格定义,但“所有权”通常意味着负责管理整个生命周期。
我认为你更普遍地解释它:如果一个关联不是聚合的,那么参与的类就不能互相引用。
事实并非如此。 Aggregated/Composite PART Class
保存Associated Class
实例的引用(或引用列表)是完全合理的。反向同样有效。在某些情况下,两者都是有效的(随之而来的是需要保持一致性)。
总结一下:外部类是否有必要拥有Associated Class
的实例?不。对于管理关系实例的二元关联的任何一端或两端都是完全有效的。
PS:最后的观察:在使用聚合时要非常小心你的意思。在UML规范中,这是出了名的不精确。组合具有更严格的定义,您可以使用组合和普通二进制关联覆盖99%以上的所有建模方案。关于唯一的地方聚合有一个明确定义的含义,而另外两个没有完全覆盖,表示递归关系必须是非循环的。
答案 1 :(得分:0)
UML未指定系统的完整行为。那么当你说一个物体拥有另一个物体时,你的意思是什么?此外,AssociatedClass实例可能是不属于任何其他对象的根对象。
答案 2 :(得分:0)
您提供的图表实际上并不包含关联类。您命名为“关联类”的类只是一个普通类。它也不属于任何东西(我们在图中看到)。
如果您的想法是关联类,那么请查看关联类的示例图:
在此示例中,MilleageCredit是一个关联类。因此,对于Fligh-FrequentFlyer的每个不同组合,都有一个MilleageCredit。
至于所有权,由于Association类表示2个关联对象之间的关系,因此在
时会被删除因此,如果删除Flight或FrequentFlyer,MilleageCredit也将消失。 此外,如果您再次取消Flight与FrequentFlyer的链接,MilleageCredit将被删除。
网上有很多优秀的UML文档,例如UML basics: The class diagram
希望这会有所帮助,否则请在问题中提供更多信息。