如何在 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。如果您选择了这种方法,您可以很好地保留您定义的模板化函数。
假设我有这样一个函数:
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。如果您选择了这种方法,您可以很好地保留您定义的模板化函数。