我有一个在编译期间根据构建配置实例化的对象。就所考虑的周围软件而言,该对象公开了相同的接口。我想模拟在编译期间做出实例化决定的事实(即static polymorphism
),而不是通常的动态多态性。
有没有办法描述静态多态性UML
class diagram
?
这或多或少是我需要的:
显然,只有上述类型定义之一将在编译时被实例化。
我有一个在编译期间根据构建配置实例化的对象。就所考虑的周围软件而言,该对象公开了相同的接口。我想模拟在编译期间做出实例化决定的事实(即static polymorphism
),而不是通常的动态多态性。
有没有办法描述静态多态性UML
class diagram
?
这或多或少是我需要的:
显然,只有上述类型定义之一将在编译时被实例化。
我认为 UML 表示对于静态和动态多态是相同的。UML 是关于类在运行时如何交互的——我不相信有用于描述模板的 UML 格式,但我可能是错的。
我认为你的图表很好。您所描述的似乎最好描述为描述您的编译过程的序列图。(有点像我猜你如何绘制工厂序列图)
正如您正确指出的那样,运行时的交互发生在接口后面的一些未知的具体事物上,因此您永远不必担心这些序列或交互图中的具体类。那里完全无关紧要。
如果发生了很多这样的事情,那么部署图也可能是一个好主意,可以帮助显示在什么情况下会发生什么具体实现。
当然,您希望记录实现您的接口的类,这只是一个与您绘制的完全一样的普通类图。
我会使用刻板印象来解决问题。所以你可以标记动态和静态
结合@ChiragDesai 和@user2004268 的答案和链接问题(静态多态定义和实现):
使用具有构造型的空类实用程序和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;
};
并添加utility
和Singleton
定型(但不要尝试从中生成代码;))