如何用UML方法表示通用参数?

我必须将Java应用程序中的某些类反向工程为UML 2类图。到目前为止,到目前为止,我已经找到了如何代表Jon

Skeet在此处表示的整个类的类模板:用UML表示模板类的正确方法是什么?。有了这些信息,我就对这样的类进行了反向工程:

public class Foo<T> {

//class fields and methods...

}

现在,我遇到了一个难题,试图对只有一个方法包含通用参数的类进行逆向工程:

public class OtherFoo {

public <T extends Comparable<T>> boolean bar(T x, T y) {

//fancy code goes here...

}

}

您知道如何实现任何UML 2工具吗?我只想了解这个概念。

回答:

我不知道如何在您选择的工具中执行此操作,但是在模型级别,它的工作方式与类完全相同。您使用签名创建模板操作。

UML2上层结构的第17.4.14章对此进行了说明:

模板操作的模板参数和模板参数绑定是操作名称和操作参数之间的两个列表。

* <可见性> <名称>’<’<模板参数列表>’>’‘<<’<绑定表达式列表>’>>’‘(’<参数> [‘,’<参数>] * * ‘)’[‘:’

<属性字符串>]

就您的情况而言,我们首先来看一下

public <T> boolean bar(T x, T y)

这将对应于

+ bar (x:T,y:T):布尔值

您的原始示例看起来更加复杂,因为模板参数被限制在另一个类Comparable中,该类又是一个模板,其参数(我将其称为T1)又绑定到操作的参数。这给了我们

+ bar 可比 T >>(x:T,y:T):布尔值

比特的深入漫步超前 )模板由UML指定(在一定程度C

++)是从泛型一个非常不同的野兽在Java中。它们看起来或多或少是相同的,但是它们的语义上存在(有时是微妙的)差异,这使得很难将两者匹配。UML中最重要的一个是:

模板不能以与相同类型的非模板元素相同的方式使用。模板元素只能用于生成绑定元素(例如,模板类不能用作类型化元素的类型)或作为另一个模板规范的一部分(例如,模板类可以专门化另一个模板类)。

这意味着在UML中,OtherFoo也需要也是一个模板-

即具有模板签名(带有0个参数)。为了在模板范围之外正确使用操作模板(即在活动或类似操作中调用它),您首先必须将其绑定到一个具体的操作上,该操作将被使用。对于您的示例,这意味着:

  1. 将OtherFoo模板绑定到(匿名)绑定类。
  2. 将栏操作模板绑定到绑定类中的操作。

以上是 如何用UML方法表示通用参数? 的全部内容, 来源链接: utcz.com/qa/418044.html

回到顶部