агрегация / состав против направленной агрегации / состав?

В чем разница между агрегацией / составом и направленной агрегацией / составом в bouml?

Понятия направленной агрегации / компоновки не встречаются нигде, кроме bouml и bouml не объясняются на его сайте.

примечание: объяснения на основе кода будут намного лучше.

1

Решение

В соответствии с формулировкой, используемой сайт из набора инструментов BOUML UML «направленное» следует понимать как «однонаправленное» (в противоположность «двунаправленному»):

агрегация: определить двунаправленную агрегацию, код
генераторы создадут два атрибута, имена которых являются ролями
название. Этот тип отношений может рассматриваться как ярлык для определения
две (направленные) агрегации.

Этот термин «направленный» относится, следовательно, к возможности навигации между связанными объектами. Для сравнения, в MSVC2015 вы найдете понятие направления в «Navigable» собственность ассоциации.

Поэтому однонаправленное агрегирование может быть, например:

class Member { ... };  // member of a club
class Club {
list<Members*> members; // you can go from Club to Members but not the contrary.
...
};

Двунаправленная агрегация должна быть примерно такой:

class Club;
class Member {   // member of a club
list<Club*> clubs;  // club to which a membershib relation exist.
...
};
class Club {
list<Members*> members; // you can go from Club to Members and now back.
...
};

Для ненаправленной композиции мы могли бы иметь, например:

class Element { ... };  // Elemetn doesn't know parent (=> unidirectional)
class Object {
vector<Element> element; // own by value for example
...
};

Или же:

class Element { ... };
class Object {
vector<unique_ptr<Element>> element; // ownnership by unique pointer
...
};

Двунаправленная композиция может быть что-то вроде:

class Object;
class Element {
Object *parent;    //  you can navigate back (Element knows about parent)
...
};
class Object {
vector<Element> element; // own by value for example
...
};
3

Другие решения

Кристоф прав. Означает ли это, что «направленный» является плохим выбором, и было бы предпочтительнее заменить «направленный» на «однонаправленный»?

Редактировать: некоторые дополнительные элементы о терминологии для записей

Стандарт UML v2.5 от OMG определяет в разделе 11.5.Associations Принцип судоходства:

Навигация означает, что экземпляры участвуют в ссылках во время выполнения
(экземпляры Ассоциации) могут быть эффективно доступны из
экземпляры на других концах Ассоциации. Точный механизм
с помощью которого достигается такой эффективный доступ, зависит от конкретной реализации.
Если конец не является судоходным, доступ с других концов может или не может
возможно, и если это так, это может быть неэффективно.

Следующие формулировки поддерживают термин «направленный»:

  • «Стрелка указывает, что ассоциация должна читаться как связывающая конец от направления стрелки с концом, на который указывает стрелка.«
  • «Ассоциации с судоходством в обоих направлениях«
  • «не имеет направленный значимость«(в разделе 20.1.4 о другом виде диаграммы).

Тем не менее, во многих местах стандарт использует явно «однонаправленный» и «двунаправленный»:

  • «На диаграмме, где стрелки
    показывается только для односторонних судоходных ассоциаций, это, вероятно, означает двунаправленную навигацию
    «
  • «Эти диаграммы (…) могут показывать навигацию (с помощью открытой стрелки) или небытие (X) либо всегда, только для однонаправленных ассоциаций (oneWay), либо никогда«(раздел B.3.2 о структурных схемах)
  • и много других мест

Таким образом, хотя «направленное» совершенно верно, термин «однонаправленный» может быть лучше, но менее двусмысленным.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector