2011-05-28 173 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. :其實源代碼也不是正確的模式:-)