Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 聚合/合成与定向聚合/合成?_C++_Uml_Diagram - Fatal编程技术网

C++ 聚合/合成与定向聚合/合成?

C++ 聚合/合成与定向聚合/合成?,c++,uml,diagram,C++,Uml,Diagram,在bouml中,聚合/组合和定向聚合/组合之间有什么区别 除了bouml和bouml未在其站点中解释外,其他地方未发现定向聚合/合成概念 注意:基于代码的解释会更好 根据BOUML UML工具箱的用户使用的措辞,“定向”必须理解为“单向”(与“双向”相对): 聚合:要定义双向聚合,代码 生成器将生成两个属性,其名称为角色的名称 名称这种关系可能被认为是定义的捷径 两个(定向)聚合 因此,该“定向”术语指相关对象之间的导航可能性。相比之下,在MSVC2015中,您可以在“可导航”中找到方向的概念

在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. 
   ...
};
类成员{…};//俱乐部成员
班级俱乐部{
列出会员;//你可以从一个俱乐部到另一个俱乐部,但不能相反。
...
};
然后,双向聚合应该类似于:

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 Object; 
class Element {
    Object *parent;    //  you can navigate back (Element knows about parent)
    ...
 }; 
class Object {
    vector<Element> element; // own by value for example
    ...
}; 
班级俱乐部;
班级成员{//俱乐部成员
列出俱乐部;//存在membershib关系的俱乐部。
...
};
班级俱乐部{
列出成员;//您可以从一个俱乐部转到另一个俱乐部,然后再返回。
...
};
对于无向构图,我们可以有例如:

class Element { ... };  // Elemetn doesn't know parent (=> unidirectional)
class Object {
    vector<Element> element; // own by value for example
    ...
}; 
类元素{…};//Elemetn不知道父项(=>单向)
类对象{
vector元素;//例如按值拥有
...
}; 
或:

类元素{…};
类对象{
向量元素;//唯一指针的所有者身份
...
}; 
然后,双向合成可以是这样的:

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 Object; 
class Element {
    Object *parent;    //  you can navigate back (Element knows about parent)
    ...
 }; 
class Object {
    vector<Element> element; // own by value for example
    ...
}; 
类对象;
类元素{
Object*parent;//您可以向后导航(元素知道父元素)
...
}; 
类对象{
vector元素;//例如按值拥有
...
}; 

克里斯托夫是对的。这是否意味着“定向”是一个错误的选择,最好用“单向”取代“定向”

编辑:关于记录术语的一些附加元素

OMG在第11.5.1节中定义了适航性原则:

可导航性意味着实例在运行时参与链接 (关联实例)可以从 关联另一端的实例。精密机构 实现这种高效访问的方法是特定于实现的。 如果一个端部不可导航,则从其他端部的访问可能会,也可能不会 这是可能的,如果可能的话,它可能没有效率

以下措辞支持“定向”一词:

  • “箭头表示关联将被理解为将远离箭头方向的一端与箭头所指的一端关联”
  • “与双向适航性的关联”
  • “无方向性意义”(第20.1.4节关于另一种图表)
然而,在许多地方,标准明确使用了“单向”和“双向”:

  • “在箭头所在的图表中 仅针对单向可导航关联显示,这可能表示双向可导航”
  • “这些图表(…)可能显示可导航性(通过一个开放箭头)或不可导航性(通过一个X),或者始终显示,仅针对单向关联(单向),或者从不显示”(关于结构图的第B.3.2节)
  • 还有很多其他地方

因此,虽然“定向”是完全正确的,但术语“单向”可能是一个更好的选择,而不是模棱两可的选择

@Sumeet的副本它不是一个副本:另一个问题是关于不同类型的关联之间的差异。这里是关于一个属性(单向/双向),存在于每个关联(导航性)中,我从你的名字和坚定的肯定中猜测,你是BOUML的作者。非常感谢您的确认!我对你的评论进行了编辑,以便为你提出的两个备选方案提供术语上的论据。希望这有帮助。是的,我是Bouml;-)的作者