2011-05-28 61 views
0

,我有以下类别:符号UML类图

class cManipulator : public cEditor 
{ 
public: 
    cManipulator(ICanvas *canvas, cCompositeRoot* obj); 
    ~cManipulator(); 
private: 
    .... 
    class VisitorSetProp* m_SetVisitor; 
    class VisitorGetProp* m_GetVisitor; 
} 

cManipulator::cManipulator(ICanvas* canvas, cCompositeRoot* obj) : 
... 
{ 
... 
    m_SetVisitor = new VisitorSetProp (this); 
    m_GetVisitor = new VisitorGetProp (this); 
} 

cManipulator::~cManipulator() 
{ 
    delete m_SetVisitor; 
    delete m_GetVisitor; 
} 

class VisitorSetProp : public Visitor 
{ 
public: 
...... 
} 

class VisitorGetProp : public Visitor 
{ 
public: 
.... 
} 

什么上UML类图的变种是正确的?

enter image description here

enter image description here

+0

编辑澄清标题。 **不是**与OP先前的题目相同。 – pavium 2011-05-28 13:55:42

回答

1

第一个是正确的(命名为组成),因为cManipulatorm_SetVisitorm_GetVisitor寿命责任。第二个是聚合。当多个对象指向访问者时会使用它,并且它们在整个生命周期中都不可重复使用。

Regards

1

第一个是正确的!
Visitor是由VisitorSetprop & VisitorGetprop执行的抽象类。
VisitorSetprop & VisitorGetprop也通过构图与cManipulator有关。 所有这些关系都适当地显示在第一个图中。

1

在这种情况下,相信该第一将是适当的符号,原因有二:

  1. 这些消息在一个方向(单向)移动。换句话说,cManipulator是唯一知道关系的人,并且所做的任何函数调用都是从cManipulator类到另一个类的。
  2. 当您删除此类的实例时,它必须删除该类的这两个实例(另一个类可能无法访问这些类)。即使你没有正确地破坏它们,它仍然应该是真的,没有其他类有这些指针。

在这里看到:http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/

0

右边是你的源代码。没有这样的Righ或Wrong模型...所有模型都是错误的。 但其中一些对于手头的问题很有用。

The model is Wrong if it does not help you to solve or make easy any of your problems. 

P.S. :其实源代码也不是正确的模式:-)