bouml中的聚合/组成和定向聚合/组成有什么区别?
除了bouml以外,在其他地方找不到定向聚集/组成概念,并且bouml不在其站点中进行解释。
注意:基于代码的解释会更好。
最佳答案
根据BOUML UML工具箱的site使用的措辞,“定向”必须理解为“单向”(与“双向”相对):
聚合:定义双向聚合,代码
生成器将产生两个属性,它们的名称是角色的
名称。这种关系可以认为是定义的捷径
两个(定向)聚合。
因此,该“定向”术语是指相关对象之间的导航可能性。为了进行比较,在MSVC2015中,您可以在“Is Navigable” property of the association中找到“方向”的概念。
因此,单向聚合可以是例如:
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
...
};