如何在 UML 中表示共享对象?

San*_*osy 6 uml class-diagram object shared-objects shared-ptr

为了设计我的代码,我正在绘制一些 UML 类图。我有一些共享对象,我想知道应该如何绘制这些对象,因为这些对象的所有权确实是共享的。更具体地说,这里是正在发生的事情的 C++ 示例:

class A
{
public:
  A(){
    std::shared_ptr<CSharedObj> sharedObj = std::make_shared<CSharedObj>;
    mB = B(sharedObj);
  }
private:
  B mB;
};

class B
{
public:
  B(std::shared_ptr<CSharedObj>);
private:
  std::shared_ptr<CSharedObj> mSharedObj;
};

class CSharedObj
{
public:
  CSharedObj();
};
Run Code Online (Sandbox Code Playgroud)

我如何在类图中表示这 3 个类之间的关系?

www*_*.nl 6

UML 没有准确定义这段 C++ 代码应该如何反映在图表中。有几种选择,这是我的建议:

在此处输入图片说明

我对 mB 使用了合成(实心菱形),因为当 A 的封闭实例被破坏时,B 的一个实例也会被破坏。

因为 CSharedObject 的实例可能被多个拥有的对象共享,所以我对 mSharedObj 使用了共享聚合(开放菱形)。在您的整个项目中,您可以设置使用共享聚合关系在类图中表示由 shared_ptr 指向的对象的约定。

请注意,该类图并未指定 A 创建的 CSharedObject 实例与 mSharedObj 指向的实例相同。如果需要,您可以添加注释来描述此事实。

如果你真的想在你的图表中显示 shared_ptr,你可以这样做:

在此处输入图片说明

有关模板化分类器的更多信息,请参阅 UML 2.5 规范第 9.3 节。