C++ Link Seam 的 UML 符号(与不同的实现共享 header)
UML notation for C++ Link Seam (shared header with different implementation)
在 C++ cross-platform 库中,
我们使用共享的headers,每个OS.
使用不同的模块版本编译
A.k.aLink-Seam
//Example:
//CommonHeader.h
#ifndef COMMON_HEADER_H
#define COMMON_HEADER_H
class MyClass {
public:
void foo();
}
#endif
.
//WindowsModule.cpp
#include "CommonHeader.h"
void MyClass::foo() {
//DO SOME WINDOWS API STUFF
printf("This implements the Windows version\n");
}
.
//LinuxModule.cpp
#include "CommonHeader.h"
void MyClass::foo() {
//DO SOME LINUX SPECIFIC STUFF HERE
printf("This implements the Linux version\n");
}
当然,在每个构建中,您只能 select 一个模块,具体取决于您使用的环境。
这是为了抑制对函数的间接调用
我的问题是:如何在 UML 中标注这种关系?
"Inheritance"? "Dependency"? "Note"?
可以看作是某种"inheritance"。然而 classes 之间没有关系,因为只有一个 class - 所以两者之间没有关系。然而,使用平台相关实现的实际构造模仿关系 "is a".
class MyClass {
public:
void foo();
}
这只不过是一个 class 合同,所以基本上是您在不同模块中 实现 的一个接口。要将其可视化,您可以使用 接口实现 表示法(类似于概括,但带有虚线)。
现实情况是,我认为您在 UML class 图中只有一个 class,即 MyClass,具有 public 操作 foo( );只是你有这个 class 的两个代码实现,一个用于 Linux,一个用于 Windows。 UML Class 模型并没有真正设置来回答你如何实现这个的问题,在你使用带有头文件的 c++ 的情况下:想象一下,如果你内联你的函数并最终编写 My[= 的两个内联实现17=],一个用于 Linux,一个用于 Windows。从逻辑上讲,您的 class 图中仍然有一个 class (但有两个实现)并且头文件(或缺少头文件)不会进入其中。因此,您需要的是一种展示 C++ 结构的方式,而不是展示逻辑 class 构造的方式。我不知道 UML 中表示代码结构的特定方法,但是您可以使用 Artefacts 构建代码结构模型(?),它可以表示 c++ 文件结构。
在 C++ cross-platform 库中,
我们使用共享的headers,每个OS.
使用不同的模块版本编译
A.k.aLink-Seam
//Example:
//CommonHeader.h
#ifndef COMMON_HEADER_H
#define COMMON_HEADER_H
class MyClass {
public:
void foo();
}
#endif
.
//WindowsModule.cpp
#include "CommonHeader.h"
void MyClass::foo() {
//DO SOME WINDOWS API STUFF
printf("This implements the Windows version\n");
}
.
//LinuxModule.cpp
#include "CommonHeader.h"
void MyClass::foo() {
//DO SOME LINUX SPECIFIC STUFF HERE
printf("This implements the Linux version\n");
}
当然,在每个构建中,您只能 select 一个模块,具体取决于您使用的环境。
这是为了抑制对函数的间接调用
我的问题是:如何在 UML 中标注这种关系?
"Inheritance"? "Dependency"? "Note"?
可以看作是某种"inheritance"。然而 classes 之间没有关系,因为只有一个 class - 所以两者之间没有关系。然而,使用平台相关实现的实际构造模仿关系 "is a".
class MyClass {
public:
void foo();
}
这只不过是一个 class 合同,所以基本上是您在不同模块中 实现 的一个接口。要将其可视化,您可以使用 接口实现 表示法(类似于概括,但带有虚线)。
现实情况是,我认为您在 UML class 图中只有一个 class,即 MyClass,具有 public 操作 foo( );只是你有这个 class 的两个代码实现,一个用于 Linux,一个用于 Windows。 UML Class 模型并没有真正设置来回答你如何实现这个的问题,在你使用带有头文件的 c++ 的情况下:想象一下,如果你内联你的函数并最终编写 My[= 的两个内联实现17=],一个用于 Linux,一个用于 Windows。从逻辑上讲,您的 class 图中仍然有一个 class (但有两个实现)并且头文件(或缺少头文件)不会进入其中。因此,您需要的是一种展示 C++ 结构的方式,而不是展示逻辑 class 构造的方式。我不知道 UML 中表示代码结构的特定方法,但是您可以使用 Artefacts 构建代码结构模型(?),它可以表示 c++ 文件结构。