Нотиране на UML диаграма на класове

Имам следния клас cDrawObjectCreator:

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

Правилна ли е диаграмата?

въведете описание на изображението тук

или следната диаграма е правилна?

въведете описание на изображението тук


person G-71    schedule 28.05.2011    source източник
comment
Бих се тревожил по-малко за диаграмите и повече за вашия код.   -  person    schedule 28.05.2011


Отговори (2)


Пак първи. По същите причини като в предишния въпрос.

Моля, прочетете това, за да видите разликата между Композиция и Агрегация.

person Alok Save    schedule 28.05.2011
comment
Хм... Когато трябва да използвам незапълнен диамант habreffect.ru/files/cb6/ecb3b6a09 /5.png ? - person G-71; 28.05.2011
comment
Просто вижте разликата между състав и агрегация. Ето например: en.wikipedia.org/wiki/Class_diagram - person Bart; 28.05.2011
comment
Защо в композитния шаблон връзката между компонент и композит не е запълнена, но това е контейнер и всички елементи ще бъдат изтрити, когато композитът бъде изтрит dofactory.com/Patterns/Diagrams/composite.gif - person G-71; 28.05.2011

Като общо правило агрегацията (кух диамант) е специализация на асоциацията, а композицията (запълнен диамант) е специализация на агрегацията.

Не забравяйте, че целта на моделирането е да улесни комуникацията, така че да използвате различни нива на абстракции в зависимост от целта и заинтересованите страни.

Ако искате да кажете, че cMimicObjectCreator има изключителна собственост върху cCompositeRoot (тоест, както човешкото / животинското тяло има мозък), тогава ще използвате състав (запълнен диамант). И ако искате да кажете, че cMimicObjectCreator има cCompositeRoot (но не само и че има случаи, в които класът на частта не съществува в цялото/контейнер, като например... лодка с GPS оборудване), тогава ще използвате агрегиране връзка.

За да отговоря на първоначалния ви въпрос, мисля, че първата диаграма е по-подходяща. Все пак не забравяйте също така, че винаги можете да използвате асоциативна връзка на мястото на композиционна или агрегационна връзка, ако искате да сте по-„общи“.

person UUlum    schedule 29.05.2011