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