聚合/组合与bouml中的定向聚合/组合有什么区别?
除了bouml和bouml在其网站中没有解释之外,其他地方都没有找到定向聚合/组合概念。注意:基于代码的解释会更好。
答案 0 :(得分:3)
根据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
...
};
答案 1 :(得分:1)
编辑:有关记录的终结的一些其他元素
OMG的UML standard v2.5在 11.5.Associations 部分中定义了导航原则:
Navigability意味着在运行时参与链接的实例 (协会的实例)可以从中有效地访问 协会另一端的实例。精确的机制 通过其实现这种有效访问是特定于实现的。 如果结束不可导航,则可以或不可以从其他端访问 是可能的,如果是的话,可能效率不高。
以下措辞支持术语&#34; direction&#34;:
尽管如此,在很多地方,标准明确使用&#34;单向&#34;和&#34; bidrectional&#34;:
所以,虽然&#34;定向&#34;是完全有效的,术语&#34; unidrectional&#34;可能是一个更好,更不明确的选择。