2012-07-12 6 views
5

Utilizzando UML, come posso rappresentare A<Foo> nel seguente codice?Come posso rappresentare l'ereditarietà da un parametro di modello in UML?

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

class Foo { }; 

A<Foo> a_foo; 

qualcosa di simile (scuse per i poveri arte ASCII ... ea Jon Skeet) è la mia prima risposta, ma ho il sospetto che non è corretto.

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

Il CRTP non descrive una classe che eredita da una classe modello, in cui l'ereditario passa se stesso come parametro del modello? In questo caso il link di generalizzazione dovrebbe avere la direzione opposta. La dipendenza legata mostrata è corretta IMHO. –

+0

@ g-makulik - sei corretto (come ha sottolineato Luchiane in basso). Ho modificato il titolo. – PaulH

+0

@Luc Touraille - buon titolo. :) – PaulH

risposta

1

C'è una proposta, da parte dell'U.M.L. designer, ma non è ancora parte dello standard.

caso, non c'era alcun parametro di modello, l'oggetto "a" di tipo "A", può essere simile a questo:

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

L'oggetto "a", che è un modello di "un "con il parametro di tipo 'Pippo', può essere rappresentata in questo modo:

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

nota, che, in UML, quando si dichiara una classe, che sono rappresentate da un rettangolo, mentre gli oggetti specifici, come ad" un ", sono rappresentati da un rettangolo con angoli arrotondati. Alcune persone, gli strumenti &, non seguono le specifiche "angoli arrotondati".

Cheers.

+0

Quindi non esiste un modo standard per rappresentare questa relazione oggi? Inoltre, sono curioso, hai uno strumento particolare che ti piace usare per UML? Sto usando MS Visio in questo momento e non sono affatto sposato con esso. – PaulH

+0

@PaulH: No, non ho uno strumento particolare. Ho iniziato con Rational Rose (strumenti UML Authors), Umbrello e altri strumenti, ma ho finito con l'uso di Power Point, Visio e Libre Office Draw (versione Open Source di Visio), a causa di limitazioni, non di denaro o strumenti: -s – umlcat

1

Non sono del tutto sicuro se questo è perfettamente normale, ma questa è la definizione della classe "A" quando ho provato a decodificare utilizzando Enterprise Architect:

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

basta aggiungere il nome del modello parametro come nome genitore della classe.