uml - UML 类图:如何使用基类正确表示派生类的向量?
问题描述
我有一个应用程序,它由一个服务器组成,该服务器可以有两种类型的多个客户端,用户客户端和设备客户端。为此,我有一个客户端基类的向量,我将在新客户端连接到服务器时添加它们。这是我所拥有的简化版本:
class Client
{
protected:
int m_port;
Client(int port): m_port{port}{}
public:
virtual ~Client(){}
}
class User: public Client
{
public:
User(int port): Client{port}{}
virtual ~User(){}
}
class Device: public Client
{
public:
User(int port): Client{port}{}
virtual ~Device(){}
}
class Server
{
public:
Server(int port): m_port{port}{}
~Server()
{
for (std::vector<Client*>::iterator it = m_clients.begin();
it != m_clients.end();
it++){
free(m_clients.pop_back());
}
}
void run()
{
if(m_port == 1){
m_clients.pushback(new User(port));
}else{
m_clients.pushback(new Device(port));
}
}
private:
int m_port;
std::vector<Client*> m_clients;
}
我有以下 UML 表示:
我怀疑这个图表是否代表正确的意图。也许我对 UML 的经验不够丰富,这已经足够了,但我认为这张图并没有清楚地描述服务器中的向量将包含用户(s)和设备(s)而不是客户端(s)的事实。我不知道是否需要添加额外的刻板印象标签、额外的注释或额外的链接或关联,如下所示:
那么,如何在 UML 中正确表示这种 c++ 类关系?
解决方案
我认为这个图没有清楚地描述服务器中的向量将包含用户和设备而不是客户端的事实。我不知道我是否需要添加额外的刻板印象标签、额外的注释或额外的链接或关联
你只需要在你的第一个图中说类Client是抽象的,你可以在图中用斜体显示它的名字。不要像在第二个图中那样添加关联。
警告在服务器m_client
中是私有的,但您使用了 + 而不是 -
您在服务器和客户端之间使用组合,您确定是这种情况,然后当服务器消失时客户端消失?C++ 代码中没有这样做。(见OP备注)
绘制m_client
为关联后,无需将其也显示为属性。
客户端不知道服务器,这在绘制关联非双向(即Server -------> Client
)时更加明显。
C++ 定义使用元素排序的向量,您可以使用{ordered}
由于 C++ 定义run with if(m_port == 1)
a server has client(s) or-exclusive device(s),你可以通过一个约束来表示
<<ctor>
并且<<vector>>
没有在标准中定义,但我不反对他们的使用。
推荐阅读
- flutter - 退出后如何回到应用程序的起点?
- elasticsearch - 分页在弹性搜索中的工作原理
- react-native - 随机选择 DynamoDB 条目
- r - 重命名列表中的数据框列
- amazon-web-services - AWS - Alexa 指令定义
- ios - 在 UIStackView 对齐过程中实际做什么 isBaselineRelativeArrangement 属性?
- c# - 我收到 System.BadImageFormatException: Invalid Image System.Runtime.InteropServices.RuntimeInformation.dll 使用单声道运行 asp.net 应用程序时
- machine-learning - 模型训练:具有不同超参数的已保存模型的命名方案
- python - python方法名称动态执行-我可以期待什么样的漏洞?
- android - 如何根据名称获取鸡尾酒列表