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

标签 generics uml class-diagram type-constraints

假设我有这样一个函数:

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

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

 +AddComponent(object: Component): void

编辑:为了让我的问题更清楚一点,这里是我的 UML 表中的一个类示例。

ExampleClass in my UML sheet

(抱歉,我现在才刚学)

最佳答案

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

不幸的是,UML 规范并未完全明确模板及其语义。

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

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

 MyQuestionFunction < T: Class > (arg:T)

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

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

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

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

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

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

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

关于generics - 如何在 UML 中表示模板函数的类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59663208/

相关文章:

C# 泛型 - 语法帮助

java - 计算器的用例建模

tomcat - Uml图Tomcat和Axis2

java - 创建 Java 代码的图表表示/从代码获取图表/将代码转换为图表的工具?

java - 使使用泛型的类的方法能够返回其自身及其子类实例

swift - 包装到没有特定泛型类型的函数中时不调用正确的方法

java - 如何在通用参数中指定我的数据类型

uml - 企业架构师: Export UML Diagrams in high quality

uml - 类图中Address 类和Person 类之间的关系?

具有继承和接口(interface)的 UML 类图