2012-07-12 130 views
5

使用UML,我如何在以下代码中表示A<Foo>如何在UML中表示从模板参数的继承?

template< class T > 
class A : public T 
{ 
    /* ... */ 
}; 

class Foo { }; 

A<Foo> a_foo; 

像这样的东西(道歉的ASCII艺术差...和Jon Skeet)是我的第一个猜测,但我怀疑这是不正确的。

  ________________ 
      |    | 
      |    | 
      |  Foo  | 
      |    | 
      |______________| 
      /:\ /|\ 
«bind»(Foo) : | 
       : | .......    
      __:____|___: T : 
      |   :.....: 
      |    | 
      |  A  | 
      |    | 
      |______________| 
+0

不是CRTP描述了从模板类继承的类,其中继承器将自身作为模板参数传递?在这种情况下,泛化链接应该有相反的方向。显示的绑定依赖关系是正确的。 – 2012-07-12 14:09:59

+0

@ g-makulik - 你是对的(正如Luchiane指出的那样)。我修改了标题。 – PaulH 2012-07-12 14:12:43

+0

@Luc Touraille - 好标题。 :) – PaulH 2012-07-12 21:43:01

回答

1

有一个提案,由联合王国。设计师,但是,它不是标准的一部分。

如果,有没有任何模板参数,对象“A”型的“A”,可能是这样的:

+--------------------+ 
|  a: A  | 
+--------------------+ 
| [+] doSomething(); | 
+--------------------+ 

对象“一”,谁是“一模板“与类型参数‘foo’的,可以被表示如下:

    +-----+ 
+-----------------| Foo | 
|     +-----+ 
|  a: A  | 
+--------------------+ 
| [+] doSomething(); | 
+--------------------+ 

注意,即,在UML,在声明类,它们是由一个矩形表示,而特定的对象,这样的”一“,由具有圆角的矩形表示。有些人,&工具,不遵循“圆角”规范。

干杯。

+0

因此,今天没有标准的方式来表达这种关系? 另外,我很好奇,你有一个特定的工具,你喜欢用于UML?我现在正在使用MS Visio,我决不会嫁给它。 – PaulH 2012-07-12 21:39:56

+0

@PaulH:不,我没有特定的工具。我从Rational Rose(UML Authors工具),Umbrello和其他工具入手,但是由于局限性而不是金钱或工具,最终使用了Power Point,Visio和Libre Office Draw(Visio的开源版本):-s – umlcat 2012-07-13 14:33:08

1

我不太清楚,如果这是完美的标准,但是这是你的“A”级的,当我试图扭转使用Enterprise Architect的工程师定义它:

 +---------+ 
+-----| T:class | 
|  +---------+ 
|  T | 
| A  | 
+----------+ 
|   | 
+----------+ 

只需添加模板的名称参数作为类的父级名称。