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