当前位置: 首页 > 知识库问答 >
问题:

c聚合关系创建

充栋
2023-03-14

我有以下代码:

class D;
class E;

#include "B.h"
#include "C.h"
#include "F.h"
#include "G.h"

#include <vector>

class A: public G {

    B  b;
    std::vector<C>  cs;
    D* d;
    std::vector<E*> es;
    std::vector<F*> fs;

public:
    A() { fs.push_back(new F); fs.push_back(new F); }
};

int main() {}

在Bouml中,我从这段代码中生成了类图:

图表

我认为 A 和 F 之间的 (https://softwareengineering.stackexchange.com/questions/255973/c-association-aggregation-and-composition) 关系必须产生聚合关系,但它产生了关联关系。如何建立聚合关系?

共有2个答案

窦宏旷
2023-03-14

反向很难区分关联和聚合。在 Bouml 中,C 反向总是在指针引用类型时产生关联,即使通过模板(d、es 和 sf 的情况),或者组合(b 和 cs) 的情况)

Bouml从2012年4月26日发布的5.1版本开始管理C 11

段干开宇
2023-03-14

这是您链接的页面如何描述关联和聚合:

关联:Foo有一个指向Bar对象的指针作为数据成员,而不管理Bar对象-

聚合:Foo有一个指向Bar对象的指针并管理该对象的生命周期-

因此,它们的区别在于,在聚合的情况下,A(在您的情况下)管理指向对象的生命周期。目前,A不管理F对象的生命周期。因此,这种关系确实是关联的。这种关系显然与E类型相同。

如果 A 的析构函数会销毁所有指向的对象,那么 A 将管理对象的生存期,并且根据给定的定义,映射将被视为聚合。

我没有Bouml的经验,但我非常怀疑它能否弄清楚析构函数的作用。我的猜测是,它是根据成员的类型以及它对现有标准类的了解来推断图表的。指针类型并不表示任何关于所有权的信息,因此仅根据类型,不可能区分关联和聚合。

然而,std::unique_ptr明确表示所有权。如果向量包含它们,那么可以从类型中简单地推断出聚集关系。由于我没有使用Bouml的经验,我不知道它是否有这样的推论。

 类似资料:
  • 我开始研究 OOAD,我很难找到一个 代码示例来说明如何以编程方式实现、和。(到处都有几篇文章,但它们与 C# 或 Java 有关)。我确实找到了一两个例子,但它们都与我的导师的指示相冲突,我很困惑。 我的理解是,在: < li >关联:Foo有一个指向Bar对象的指针作为数据成员 < li >聚合:Foo有一个指向Bar对象的指针,Bar的数据被深度复制到该指针中。 < li >组成:Foo有一

  • 我在UML中遇到了和关系的一些问题,我确实理解整体/部分关系,所以如果一个类不能没有它的整体而存在,那么它就成为一个强的组合关系,如果它仍然可以没有它的整体而存在,那么它就成为一个弱的聚合关系。 然而,当处理真正的软件需求时,有时会变得更加棘手。我有一个下面的类图,包括所有必要的属性、操作和特性,它们都正确地显示在UML标准中,但是我不确定我的关系: 1 接口和 6 类 有人可以确认我的关系是否正

  • 我试图确认我对关联、聚合的代码外观的理解 聚合:哈斯-a。它具有另一种类型的现有对象 组成:由另一个对象组成 协会:我对此有两种看法。 > 当一个类与另一个类相关联时。因此,上述两个都是关联的示例。 关联是一种较弱的聚合形式,其中类不保留对其接收的对象的引用。 我的理解正确吗?我在这里和这里阅读了相互矛盾的文章,所以我真的不确定该遵循哪一个。我的理解似乎符合第一个环节。我觉得第二个环节是错误的,或

  • 有人能帮我把这个mongoDB聚合转换成Spring数据mongo吗? 我试图在每个邀请函文件中获得未提醒与会者的电子邮件列表。 让它在mongo shell中运行,但需要在Spring data mongo中运行。 我的shell查询 ) 正如你们所看到的,这是我提出的,它在管道的项目和团队运作中并没有像预期的那样发挥作用。下面给出了生成的查询。 聚合对象创建 它创建以下查询 聚合对象生成的查询

  • 本文向大家介绍C++聚合关系类的构造函数的调用顺序详解,包括了C++聚合关系类的构造函数的调用顺序详解的使用技巧和注意事项,需要的朋友参考一下 如图,表示一个聚合关系 下面就用简单的代码来实现 由此可以看出,对象的构造函数调用的顺序就好像我们造车子一样,先打造好引擎和其他部件才能拼装好汽车,析构函数的调用就和拆开汽车一样,先扒开最外面的,然后再扒里面的。 以上这篇C++聚合关系类的构造函数的调用顺

  • 目前,我有个问题。我可以在mongodb中使用聚合函数查询相应的数据,但是在使用springdatamongodb后,我发现lookup不能使用变量将string转换为objectid,那么该如何编写这个聚合函数呢 如何在spring data mogodb中将其写成mongodb表达式