C ++ Link Seam的UML表示法(具有不同实现的共享头)

时间:2018-01-28 07:41:26

标签: c++ uml cross-platform

在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 ;? "注意"

3 个答案:

答案 0 :(得分:4)

class MyClass {
public:
  void foo();
}

这只不过是一个类合约,所以基本上是一个你在不同模块中实现的接口。为了使其可视化,您可以使用接口实现表示法(如泛化,但使用虚线)。

enter image description here

答案 1 :(得分:1)

现实是我认为你在UML类图中只有一个类,是MyClass,有一个公共操作foo();这只是你有两个这个类的代码实现,一个用于Linux,一个用于Windows。 UML类模型并没有真正设置为回答你如何实现这个问题,在你的情况下使用带有头文件的c ++:想象一下,如果你改编了你的函数并最终写了两个内联的MyClass实现,一个用于Linux和一个对于Windows。从逻辑上讲,你的类图中仍然有一个类(但有两个实现),头文件(或缺少它)不会进入它。因此,您需要一种方式来显示C ++的结构,而不是显示逻辑类结构的方法。我不知道UML中用于表示代码结构的特定方式,但是您可以使用Artefacts(?)来构建代码结构模型,这可能表示c ++文件结构。

答案 2 :(得分:0)

它可以被视为某种"继承"。然而,类之间没有关系,因为只有一个类 - 所以两者之间没有关系。然而,使用平台相关实现的实际构造模仿关系"是"。