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

How to represent shared objects in UML?

为了设计我的代码,我正在绘制一些 UML Class 图。 我有一些共享对象,我想知道应该如何绘制,因为这些对象的所有权是真正共享的。 更具体地说,这里有一个正在发生的事情的 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();
};

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

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

我对 mB 使用了组合(实心菱形),因为当 A 的封闭实例被销毁时,B 的实例也被销毁。

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

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

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

参见 UML 2.5 规范第 9.3 节,了解有关模板化 class 生成器的更多信息。