描述UML类图中的静态多态性

时间:2013-05-12 09:57:37

标签: polymorphism uml class-diagram static-polymorphism

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

有没有办法在UML class diagram中描述静态多态?

这或多或少是我需要的:

enter image description here

显然,在编译时只会实例化上述类型定义中的一个。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我认为你的图很好。您所描述的内容似乎最好描述为描述编译过程的序列图。 (有点像你猜的那样我会画一个工厂序列图)

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

如果发生了大量此类事件,那么部署图也可能是一个好主意,可以帮助显示在什么情况下会发生什么具体实现。

你想要记录实现你的接口的类,这只是一个正常的类图,就像你绘制它一样。

答案 3 :(得分:1)

结合来自@ChiragDesai和@ user2004268的答案和链接问题(Static polymorphism definition and implementation):

  1. 多态性类型是一个实现细节,因此它在设计图中没有主动作用。
  2. 实施细节可以在UML图中出现,但具有互补和非正式的作用。可以使用刻板印象和笔记来澄清意图。

答案 4 :(得分: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刻板印象(但不要尝试从生成代码;))