在C ++跨平台库中,
我们使用为每个操作系统编译不同模块版本的共享头文件
A.k.a Link-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");
}
当然,在每个版本中,您只选择一个模块,分别对应您正在使用的环境。
这是为了抑制对函数的间接调用
我的问题是:如何在UML中注意这种关系?
"继承&#34 ;? "相关性&#34 ;? "注意"
答案 0 :(得分:4)
class MyClass {
public:
void foo();
}
这只不过是一个类合约,所以基本上是一个你在不同模块中实现的接口。为了使其可视化,您可以使用接口实现表示法(如泛化,但使用虚线)。
答案 1 :(得分:1)
现实是我认为你在UML类图中只有一个类,是MyClass,有一个公共操作foo();这只是你有两个这个类的代码实现,一个用于Linux,一个用于Windows。 UML类模型并没有真正设置为回答你如何实现这个问题,在你的情况下使用带有头文件的c ++:想象一下,如果你改编了你的函数并最终写了两个内联的MyClass实现,一个用于Linux和一个对于Windows。从逻辑上讲,你的类图中仍然有一个类(但有两个实现),头文件(或缺少它)不会进入它。因此,您需要一种方式来显示C ++的结构,而不是显示逻辑类结构的方法。我不知道UML中用于表示代码结构的特定方式,但是您可以使用Artefacts(?)来构建代码结构模型,这可能表示c ++文件结构。
答案 2 :(得分:0)
它可以被视为某种"继承"。然而,类之间没有关系,因为只有一个类 - 所以两者之间没有关系。然而,使用平台相关实现的实际构造模仿关系"是"。