2012-07-12 15 views
5

Usando UML, ¿cómo puedo representar A<Foo> en el siguiente código?¿Cómo puedo representar la herencia de un parámetro de plantilla en UML?

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

class Foo { }; 

A<Foo> a_foo; 

algo como esto (disculpas por la mala arte ASCII ... y para Jon Skeet) es mi primera suposición, pero sospecho que no es correcto.

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

¿No describe el CRTP una clase que hereda de una clase de plantilla, donde el heredero se pasa a sí mismo como parámetro de plantilla? En este caso, el enlace de generalización debe tener la dirección opuesta. La dependencia de enlace que se muestra es correcta en mi humilde opinión. –

+0

@ g-makulik - estás en lo correcto (como señaló Luchiane a continuación). He modificado el título. – PaulH

+0

@Luc Touraille - buen título. :) – PaulH

Respuesta

1

Existe una propuesta de U.M.L. diseñadores, pero aún no es parte del estándar.

Si, no había ningún parámetro de plantilla, el objeto "a" de tipo "A", puede ser la siguiente:

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

El objeto "a", que es una plantilla de "una "con el parámetro de tipo 'Foo', puede ser representada así:

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

Tenga en cuenta, que en UML, cuando se declara una clase, que están representados por un rectángulo, mientras que los objetos específicos, como" una ", están representados por un rectángulo con esquinas redondeadas. Algunas personas, & herramientas, no siguen la especificación de "esquinas redondas".

Saludos.

+0

¿Entonces no hay una forma estándar de representar esta relación hoy? Además, tengo curiosidad, ¿tiene alguna herramienta particular que le guste usar para UML? Estoy usando MS Visio en este momento y de ninguna manera estoy casado con él. – PaulH

+0

@PaulH: No, no tengo una herramienta en particular. Empecé con Rational Rose (herramientas de autores de UML), Umbrello y otras herramientas, pero terminé usando Power Point, Visio & Libre Office Draw (versión de código abierto de Visio), debido a limitaciones, no a dinero ni herramientas: -s – umlcat

1

No estoy muy seguro de si esto es perfectamente normal, pero esta es la definición de la clase "A" cuando traté de técnicas de ingeniería inversa usando EA:

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

sólo tiene que añadir el nombre de la plantilla parámetro como el nombre principal de la clase.

Cuestiones relacionadas