当前位置: 首页 > 面试题库 >

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

孟智志
2023-03-14
问题内容

我必须将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. 将栏操作模板绑定到绑定类中的操作。


 类似资料:
  • 我是IntelliJ的新手,最近更新到IntelliJ-2016.3。 在Java代码编辑器中,它显示了使用时的方法签名。如何禁用此功能? 这个行为在2016.1.4版本是没有的。更新后我看到了这个。 感谢任何帮助!

  • 问题内容: 在UML图上,代表模板类的正确方法是什么? 问题答案: 在右上角带有虚线矩形的普通矩形,代表模板参数。像这样:

  • 在Android中,假设我们有两个类,它们具有启动服务的常用方法,因此我们将它们提取到helper类中: 下图显示了我对表示它的奇怪尝试。我使用了交易窄。我认为这些是活动图,但在uml图中。组织/类别参考。html,这些狭义称为关联可导航性。这就是为什么我用它们来表示图表。在HelperClass和ClassService之间,我使用了正常的关联。在类和服务之间,我使用了一个限制(为了更清楚,它只

  • 问题内容: 如何使用Python的文档字符串使用参数记录方法? 编辑: PEP 257给出了这个例子: 这是大多数Python开发人员使用的约定吗? 我期待一些更正式的东西,例如 环境 :Python 2.7.1 问题答案: 根据我的经验,numpy的文档字符串公约(PEP257超集)是最广泛的传播 遵循 惯例,它们也通过工具,如支持的狮身人面像。 一个例子:

  • 请考虑以下类: 我想在序列图中表示这样一个事实:a的实例首先导航到关联端以到达B实例,然后导航到其关联以到达C实例,然后调用操作。 我如何在序列图中表示这个?Afaik,从一个物体导航到另一个物体不是一个消息,因此不能用箭头来表示,对吗?那么我如何显示C实例是如何被A实例找到的呢? 换句话说,afaik,用提出的类图,我不能有表示a和C的序列图,我只能表示a和B,或者B和C中的任何一个。

  • 问题内容: 我需要帮助使此类型适用于任何类型。 我有一个函数,我需要接受具有属性的其他类型。 我尝试使用接口,但不适用于我的财产情况。这是代码: 我明白了 错误prog.go:39:在Count的参数中无法将人类([人类]类型)用作[]哺乳动物 有关更多详细信息,请参见Go Playground,网址为http://play.golang.org/p/xzWgjkzcmH 问题答案: 使用接口而不