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
    ...
};

10-06 10:56