如何在 UML 中表示模板函数的类型约束

How to represent a type constraint for a template function in UML

假设我有这样一个函数:

public AddComponent<T extends Component>(type: T) {
    //do stuff
  }

我如何在 UML 图中表示它?对于普通功能,我会这样写:

 +AddComponent(object: Component): void

编辑:为了让我的问题更清楚一点,这里有一个 class 在我的 UML sheet.

中的例子

(抱歉,我现在才刚学)

首先,与你的问题无关:你不应该在不同的操作组之间使用行分隔符:保留它来区分属性和操作。

不幸的是,UML 规范对模板及其语义并不完全清楚。

语义在第 7.3.2 节中定义。将模板及其绑定定义为某种替代。

在9.6.4节中定义了模板操作的表示法。这就是您要找的:

 MyQuestionFunction < T: Class > (arg:T)

如果您必须使用它们,它还定义了具体的绑定:

MyQuestionFunction << T->Component >> (arg: Component)

但它没有预见到对模板参数指定约束,说 T 必须是 Component。所以恕我直言,它似乎更符合 C++ 类型的模板,其中类型参数没有明确约束。您最终可以在函数旁边用自然语言记录一般的 UML 约束:{T extends Component}

该部分提供的 BNF 规范进一步记录了如何将操作指定为模板参数,但在基础知识方面似乎不完整。

回到您的图表,还要注意 UML 标准配置文件:

  • 不使用 void return 类型。在严格的 UML 中,只显示一个 void 函数,根本没有任何 return 类型。
  • 不知道 int 基本类型,但知道 Integer

但是,建模者经常使用实现语言的类型,假设特定于语言的配置文件将使用缺失的类型扩展核心 UML。如果您选择了这种方法,您可以很好地保留您定义的模板化函数。