几天前,一位朋友向我指出,我对UML中的构图有错误的想法。她是完全正确的,所以我决定找出我可能犯的错误。现在,我还有一件事需要怀疑:我在代码库中有一个循环依赖,我希望以UML形式呈现。但是如何。
在我的情况下,以下情况属实:
为了对此进行建模,我已经提出了以下UML(我现在已经忽略了多重性,为了不占用图表。)
我的问题是,这是建立这种关系的正确方法吗?
答案 0 :(得分:3)
<强>问题强>
要牢记的一些事实:
<强>更正强>
以下是您的模型的重新设计,以使其更正确:
请注意以下事项:
C
的实例存在,而不是由A
或B
组成。 (参见下面的返工模型。)推荐设计
如果我正确理解了你的模型意味着什么,我可能会将实现转化为设计:
请注意以下事项:
D
是抽象的(类名以斜体显示),这意味着它没有直接实例。概括集说:
A
和B
进行多重分类。 (即,A
和B
是{disjoint}。)D
的实例必须是其中一个子类的实例。 (即A
和B
{完全},称为covering axiom。)ownedC
中的D
属性。C
的实例存在,而不是由A
或B
组成答案 1 :(得分:1)
将露天钻石留下并使它们成为正常的关联。这些不是共享聚合,而是简单的关联。复合聚合没问题。
一般来说,显示聚合的附加值并不大。语义附加值非常低。在过去,这是一个很好的提示,可以帮助垃圾收集处理不需要的对象。但是现在几乎所有目标语言都内置了高效的垃圾收集器。只有在您希望显式删除聚合对象的情况下,才应使用复合聚合。