В чем разница между агрегацией / составом и направленной агрегацией / составом в bouml?
Понятия направленной агрегации / компоновки не встречаются нигде, кроме bouml и bouml не объясняются на его сайте.
примечание: объяснения на основе кода будут намного лучше.
В соответствии с формулировкой, используемой сайт из набора инструментов 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
...
};
Кристоф прав. Означает ли это, что «направленный» является плохим выбором, и было бы предпочтительнее заменить «направленный» на «однонаправленный»?
Редактировать: некоторые дополнительные элементы о терминологии для записей
Стандарт UML v2.5 от OMG определяет в разделе 11.5.Associations Принцип судоходства:
Навигация означает, что экземпляры участвуют в ссылках во время выполнения
(экземпляры Ассоциации) могут быть эффективно доступны из
экземпляры на других концах Ассоциации. Точный механизм
с помощью которого достигается такой эффективный доступ, зависит от конкретной реализации.
Если конец не является судоходным, доступ с других концов может или не может
возможно, и если это так, это может быть неэффективно.
Следующие формулировки поддерживают термин «направленный»:
Тем не менее, во многих местах стандарт использует явно «однонаправленный» и «двунаправленный»:
Таким образом, хотя «направленное» совершенно верно, термин «однонаправленный» может быть лучше, но менее двусмысленным.