据我所了解,为开放泛型类型提供类型参数可以通过在UML类图中使用“bind”构造来表示。
例如,考虑以下类:
这可以被建模为一个UML类图,如下所示: 但是如果我们通过泛型类型参数来构造一个基于
根据上述注释,我认为UML类图应该是这样的: 但是这看起来有点混乱,因为不明显
这导致了这样一种情况,我们要么最终得到多个看起来完全相同的节点:
请注意,如果我写成例如
例如,考虑以下类:
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]
。