2011-05-28 65 views
0

的,我有以下类cDrawObjectCreator:符号UML类图

class cDrawObjectCreator 
{ 
public: 
    cDrawObjectCreator(cCompositeRoot *compositeObject) { m_compositeRoot = compositeObject; } 
    ~cDrawObjectCreator() {}; 
    ... 
private: 
    cCompositeRoot *m_compositeRoot; 
}; 

这是正确的图表?

enter image description here

或以下图表是正确的?

enter image description here

+2

我不担心图表和更多关于你的代码。 – 2011-05-28 13:53:55

回答

2
再次

第一个。基于与上一课题相同的理由。

请仔细阅读this,看到Compostion聚集之间的差异。

+0

嗯......当我必须使用没有填充的钻石http://habreffect.ru/files/cb6/ecb3b6a09/5.png? – 2011-05-28 14:00:01

+1

只需查看构图和聚合的区别。例如:http://en.wikipedia.org/wiki/Class_diagram – Bart 2011-05-28 14:10:59

+0

为什么在复合模式中,组件和复合之间的关系没有被填充,但是这是容器,所有的元素都将被删除,何时将会删除复合http:/ /www.dofactory.com/Patterns/Diagrams/composite.gif – 2011-05-28 14:19:41

2

作为一般规则,聚合(空心钻石)是关联的专业化,而合成(实心菱形)是聚合的一种专门化。

记住建模的目的是为了促进沟通,所以你会根据目的和利益相关者使用不同级别的抽象。

如果您想要说cMimicObjectCreator拥有cCompositeRoot的独占所有权(即,就像人类/动物身体有大脑),那么您将使用合成(实心菱形)。如果你想说cMimicObjectCreator有一个cCompositeRoot(但不是唯一的,并且有部分类不存在于整个/容器中,比如说......一个带有GPS设备的船),那么你可以使用聚合关系。

要回答您的原始问题,我认为第一个图更合适。不过请记住,如果你想更“一般”,你总是可以使用关联关系代替合成关系或聚合关系。