如何用UML表示共享对象?

时间:2016-11-04 10:02:52

标签: object uml shared-ptr class-diagram shared-objects

设计我的代码我正在绘制一些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();
};

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

1 个答案:

答案 0 :(得分:4)

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

enter image description here

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

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

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

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

enter image description here

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