Обозначение диаграммы классов UML - PullRequest
0 голосов
/ 28 мая 2011

У меня есть следующие классы:

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

Ответы [ 4 ]

1 голос
/ 28 мая 2011

В этом случае, я считаю, что первая будет подходящей нотацией по двум причинам:

  1. Сообщения движутся в одном направлении (однонаправленно).Другими словами, cManipulator - единственный, кто знает о взаимосвязи, и любые вызовы функций переходят из класса cManipulator в другой.
  2. Когда вы удаляете экземпляр этого класса, он должен удалять этидва экземпляра этого класса (предположительно, другой класс не имеет доступа к этим классам).Даже если вы не уничтожите их должным образом, все равно должно быть верно, что ни один другой класс не имеет таких указателей.

См. Здесь: http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/

1 голос
/ 28 мая 2011

Первый правильный (названный состав ), поскольку cManipulator несет пожизненную ответственность за m_SetVisitor и m_GetVisitor.

.второй называется агрегация .Он используется, когда более чем один объект указывает на посетителей, и они не подлежат возврату на всю жизнь.

С уважением

1 голос
/ 28 мая 2011

Первый является правильным!
Visitor - это абстрактный класс, который реализуется VisitorSetprop & VisitorGetprop.
VisitorSetprop & VisitorGetprop также относятся к cManipulatorчерез состав.Все эти отношения соответствующим образом показаны на первой диаграмме.

0 голосов
/ 10 июня 2011

Правильным является ваш исходный код.Такой модели Righ или Wrong нет ... Все модели НЕПРАВИЛЬНЫ.Но некоторые из них полезны для решения этой проблемы.

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

PS: На самом деле исходный код тоже не подходящая модель: -)

...