7

我有一个在编译期间根据构建配置实例化的对象。就所考虑的周围软件而言,该对象公开了相同的接口。我想模拟在编译期间做出实例化决定的事实(即static polymorphism),而不是通常的动态多态性。

有没有办法描述静态多态性UML class diagram

这或多或少是我需要的:

在此处输入图像描述

显然,只有上述类型定义之一将在编译时被实例化。

4

5 回答 5

3

我认为 UML 表示对于静态和动态多态是相同的。UML 是关于类在运行时如何交互的——我不相信有用于描述模板的 UML 格式,但我可能是错的。

于 2013-05-23T07:57:51.607 回答
2

我认为你的图表很好。您所描述的似乎最好描述为描述您的编译过程的序列图。(有点像我猜你如何绘制工厂序列图)

正如您正确指出的那样,运行时的交互发生在接口后面的一些未知的具体事物上,因此您永远不必担心这些序列或交互图中的具体类。那里完全无关紧要。

如果发生了很多这样的事情,那么部署图也可能是一个好主意,可以帮助显示在什么情况下会发生什么具体实现。

当然,您希望记录实现您的接口的类,这只是一个与您绘制的完全一样的普通类图。

于 2013-05-24T09:36:39.407 回答
2

我会使用刻板印象来解决问题。所以你可以标记动态和静态

于 2013-05-24T06:02:05.900 回答
1

结合@ChiragDesai 和@user2004268 的答案和链接问题(静态多态定义和实现):

  1. 多态类型是一个实现细节,因此它在设计图中没有积极作用。
  2. 实现细节可以出现在 UML 图中,但具有补充和非正式的作用。刻板印象和注释可用于阐明意图。
于 2013-05-24T08:54:04.683 回答
0

使用具有构造型的空类实用程序和Singleton名为 eg 的通用布尔参数#ifdef(YOUR_FLAG),其true特化将实例作为具有公共或实现可见性的静态成员。

已编辑(回复评论)

在您的 UML 工具中绘制:

伪 C++ 代码:

class Foo; 

template <
   Boolean #ifdef(WHATEVER)
> struct Bar {};

template <> 
struct Bar<true> {
  public: 
    static Foo the_foo;
};

并添加utilitySingleton定型(但不要尝试从中生成代码;))

于 2013-05-24T07:02:57.860 回答