bouml 中的聚合/组合和定向聚合/组合有什么区别?
除了 bouml 和 bouml 在其站点中没有解释外,其他地方找不到定向聚合/组合概念。
注意:基于代码的解释会好得多。
根据BOUML UML 工具箱站点使用的措辞,“定向”必须理解为“单向”(与“双向”相反):
聚合:要定义双向聚合,代码生成器将生成两个名称为角色名称的属性。这种关系可以被认为是定义两个(定向)聚合的捷径。
因此,这个“定向”术语指的是相关对象之间的导航可能性。为了进行比较,在 MSVC2015 中,您可以在关联的“可导航”属性中找到方向的概念。
因此,单向聚合可以是例如:
class Member { ... }; // member of a club
class Club {
list<Members*> members; // you can go from Club to Members but not the contrary.
...
};
Run Code Online (Sandbox Code Playgroud)
双向聚合应该是这样的:
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.
...
};
Run Code Online (Sandbox Code Playgroud)
对于无方向的组合,我们可以有例如:
class Element { ... }; // Elemetn doesn't know parent (=> unidirectional)
class Object {
vector<Element> element; // own by value for example
...
};
Run Code Online (Sandbox Code Playgroud)
或者:
class Element { ... };
class Object {
vector<unique_ptr<Element>> element; // ownnership by unique pointer
...
};
Run Code Online (Sandbox Code Playgroud)
双向组合可能是这样的:
class Object;
class Element {
Object *parent; // you can navigate back (Element knows about parent)
...
};
class Object {
vector<Element> element; // own by value for example
...
};
Run Code Online (Sandbox Code Playgroud)