如何表示此演示代码段的关系?
How to represent the relationship for this demo code snippet?
为该演示代码片段绘制class图时如何表示class ResMulti
和class Do_work
之间的关系(参见godbolt):
#include <thread>
#include <future>
#include <functional>
class Res4ClassA{};
class Res4ClassB{};
Res4ClassA Calculate_A(){return Res4ClassA{};}
Res4ClassB Calculate_B(){return Res4ClassB{};}
class ResMulti
{
public:
void SetRes4ClassA (const Res4ClassA& res_a)
{
res_a_ = res_a;
}
void SetRes4ClassB (const Res4ClassB& res_b)
{
res_b_ = res_b;
}
const Res4ClassA& GetRes4ClassA ()
{
return res_a_;
}
const Res4ClassB& GetRes4ClassB ()
{
return res_b_;
}
private:
Res4ClassA res_a_;
Res4ClassB res_b_;
};
class Do_work
{
public:
void Run(const Res4ClassA* res){}
};
int main()
{
Res4ClassA res_a = Calculate_A();
ResMulti res_multi;
res_multi.SetRes4ClassA(res_a);
Do_work work;
work.Run(&res_multi.GetRes4ClassA());
}
问题:为该演示代码片段绘制class图时,如何表示class ResMulti
和class Do_work
之间的关系?
ResMulti
和Do_work
没有直接关系:
Do_work
可能依赖于 Res4ClassA
因为它可能需要了解该类型(在 C++ 中不是正式的,因为指针在使用时从未被取消引用,但如果可能的话在设计中,如果我们希望操作对所引用的对象有任何意义的话);
ResMulti
可以具有包含 Res4ClassA
组件的复合聚合,因为它具有该类型的 C++ 成员并且考虑到语言语义。
main()
恰好做胶水。但这不是结构关系:它是从 main() 实现的行为中出现的动态关系。
为该演示代码片段绘制class图时如何表示class ResMulti
和class Do_work
之间的关系(参见godbolt):
#include <thread>
#include <future>
#include <functional>
class Res4ClassA{};
class Res4ClassB{};
Res4ClassA Calculate_A(){return Res4ClassA{};}
Res4ClassB Calculate_B(){return Res4ClassB{};}
class ResMulti
{
public:
void SetRes4ClassA (const Res4ClassA& res_a)
{
res_a_ = res_a;
}
void SetRes4ClassB (const Res4ClassB& res_b)
{
res_b_ = res_b;
}
const Res4ClassA& GetRes4ClassA ()
{
return res_a_;
}
const Res4ClassB& GetRes4ClassB ()
{
return res_b_;
}
private:
Res4ClassA res_a_;
Res4ClassB res_b_;
};
class Do_work
{
public:
void Run(const Res4ClassA* res){}
};
int main()
{
Res4ClassA res_a = Calculate_A();
ResMulti res_multi;
res_multi.SetRes4ClassA(res_a);
Do_work work;
work.Run(&res_multi.GetRes4ClassA());
}
问题:为该演示代码片段绘制class图时,如何表示class ResMulti
和class Do_work
之间的关系?
ResMulti
和Do_work
没有直接关系:
Do_work
可能依赖于Res4ClassA
因为它可能需要了解该类型(在 C++ 中不是正式的,因为指针在使用时从未被取消引用,但如果可能的话在设计中,如果我们希望操作对所引用的对象有任何意义的话);ResMulti
可以具有包含Res4ClassA
组件的复合聚合,因为它具有该类型的 C++ 成员并且考虑到语言语义。main()
恰好做胶水。但这不是结构关系:它是从 main() 实现的行为中出现的动态关系。