Class 确定KLM和ABC类之间UML关系的类型

Class 确定KLM和ABC类之间UML关系的类型,class,object,c++11,uml,relationship,Class,Object,C++11,Uml,Relationship,ABC班和荷航之间的关系应该是什么?是否应该是组合、聚合或关联或任何其他关系 #include<iostream> using namespace std; class ABC { int x; public: ABC() { cout<<"1\t"; } ~ABC() { cout<<"2\t"; } }; class KLM { int y; ABC *O1; public:

ABC班和荷航之间的关系应该是什么?是否应该是组合、聚合或关联或任何其他关系

#include<iostream>
using namespace std;
class ABC
{
    int x;
public:
    ABC() { cout<<"1\t"; }
    ~ABC() { cout<<"2\t"; }
};
class KLM
{
    int  y;
    ABC *O1;
public:
    KLM() { cout<<"3\t"; }
    ~KLM() { cout<<"4\t"; }
};
int main()
{
    KLM *O4=new KLM();
    ABC a1;
    delete(O4);

    return 0;
}
#包括
使用名称空间std;
ABC班
{
int x;
公众:

ABC(){cout是的,至少存在一个关联:

  • KLM
    中的
    ABC
    指针显示
    KLM
    的实例与
    ABC
    的实例之间可以存在链接。此外,关联可以从
    KLM
    导航到
    ABC
  • 在关联的
    ABC
    端,多重性为
    0..1
    ,因为指针最多可以指向一个对象。但是,我们可以假设它可以是
    nullptr
    ,即不指向任何对象
现在代码中存在一个问题:指针
KLM::O1
未初始化。如果未在构造函数中显式为其赋值,则应确保其为
nullptr

我们无法了解更多有关此关系的信息,因为我们不知道如何将此指针指定给指向
ABC
对象的点,例如:

  • 两个不同的
    KLM
    对象是否指向相同的
    ABC
    ?这将排除合成
  • 一个
    KLM
    对象本身是否创建了
    ABC
    对象并阻止其地址被公开?在这种情况下,我们可能会怀疑UML组合
提示1:您有一个带有指针成员的类。您应该实现(或5)以避免严重的内存管理错误。如果您展示了规则的实现,我们可以更确定地告诉您是否有组合

<> >强>提示2 < /强>:在C++ C++中,使用智能指针优先于原始指针。特别是,<>代码> UnQuyJPt//Cuth>提出了一种对组合的典型所有权。A<代码> SyddYPPT/<代码>建议共享所有权在聚合中很常见(但我们不能排除简单关联)。.A
弱_ptr
表示缺乏所有权,因此必然是简单的关联


备注:代码和模型之间没有一对一的关系。相同的代码可以用于实现不同的模型。相同的模型可以用不同的代码实现。设计意图并不总是包含在代码片段中。因此,更多的是建议或或多或少排除一些可能性,而不是发现一个独特的现实。

关于上述问题,我不清楚上述代码是否实现了关联关系。虽然关联、聚合和组合之间的区别肯定与此问题相关,但重点似乎是这些概念与实现的映射。重复选择的doeLet’我们不能很好地解决这个问题。我建议要么重新讨论这个问题,要么提出另一个问题duplicate@Christophe“被骗问题”明确要求从实施的角度进行解释。如果你觉得答案不如预期的好,也许你可以添加一个更好的答案?@GeertBellekens确实,在第二次阅读后,我看到问题已经解决。不幸的是,第一个答案(票数惊人)解释它是完全错误的,只会增加混乱和参与不必要的聚合的传播。鉴于上述问题,如果我们不初始化类KLM中的指针ABC*O1,那么我们可以说ABC和KLM这两个类之间没有关系吗?也就是说,我们可以说上面的代码没有实现r类ABC与KLM?@ HHSITSIGH之间的关系,我假设代码只是一个更完整的例子,如果我们认为上面的代码是完整的和精确的,那么O1不是初始化的,从来没有被改变过,也没有被访问过,所以它是一个无用的指针,你确实可以说没有伙伴。在这种情况下,两个类之间仍然存在依赖关系:KLM需要了解ABC。(只需编译一个没有任何内部细节的ABC转发声明就足够了,但事实是KLM依赖于ABC。请您详细说明上述类是如何实现依赖关系的。@HarshitSingh是的。现在请记住,我们是这样说的,根据我们对特定实现的了解忽略了ptr声明。在现实生活中,这通常不会发生。成员通常不会未使用。此外,从设计角度来看,在现实生活中,我们可能会查看接口(例如声明的成员)考虑到函数的实现应该是自由进化的,所以O1是否初始化为指向一个有效的对象是一个实现细节。因此,我仍然感到更舒服地说有一个(潜在的)关联。”HarshitSingh Christophe回答了你的问题,甚至更多(提示)。,但所能做的是有限制的,不可能通过备注详细说明所有关于UML的内容。请参阅有关UML的文档,包括标准()。除此之外