如何在UML类图中表示开放式泛型类型构造?
UML类图中泛型参数传递的建模约定问题
我了解到,在UML类图中可以通过bind构造型为开放式泛型类型提供类型实参。
比如以下C#代码:
public class A<T> { } public class B { public A<string> Value { get; set; } }
对应的UML类图如下:
但如果是传递泛型参数,基于A<T>构造开放式泛型类型的情况该怎么处理?比如这段代码:
public class A<T> { } public class B<X> { public A<X> Value { get; set; } }
按照之前的表示法,我画出的UML类图是这样的:
但这种表示法容易让人困惑——X只在B的作用域内声明,却在A<X>里被当作全局有效声明使用。当多个类型引用A且都用名为X的泛型参数时,问题会更突出,比如添加下面这个类:
public class C<X> { public A<X> Data { get; set; } }
这会导致两种不合理的情况:要么出现多个看起来完全一样的节点:
要么标识符X同时代表多个完全不同的独立声明对象:
是否存在处理此类情况的通用约定?
注:规范的构造类型类标签应该写成A<string>,但我发现PlantUML里无法实现,软件会把string渲染成开放式泛型参数,所以本文用方括号生成A[string]这样的标签。
内容的提问来源于stack exchange,提问作者F-H
相关产品推荐
相关产品推荐

