设计我的代码我正在绘制一些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个类之间的关系?
答案 0 :(得分:4)
UML没有确切地定义如何在图中反映这段C ++代码。有几种选择,这是我的建议:
我使用了mB的合成(填充菱形),因为当A的封闭实例被破坏时,B的一个实例被破坏。
因为CSharedObject的实例可能由多个拥有对象共享,所以我使用了mSharedObj的共享聚合(空心菱形)。在整个项目中,您可以设置shared_ptr指向的对象使用共享聚合关系在类图中表示的约定。
请注意,此类图未指定由A创建的CSharedObject实例与mSharedObj指向的实例相同。如果需要,可以添加一个注释来描述这一事实。
如果您真的想在图表中显示shared_ptr,可以这样做:
有关模板化分类器的更多信息,请参阅UML 2.5规范第9.3节。