La trasformazione genera un'operazione UML come metodo della relativa classe e utilizza le proprietà UML di seguito riportate:
Proprietà |
C++ |
Nome |
Nome del metodo (viene applicata la convalida del nome) |
Visibilità |
Determina la visibilità del metodo |
IsAbstract |
Genera il metodo come metodo virtuale puro |
IsQuery |
Genera il metodo come const (aggiunge "const" al suffisso dell'operazione) |
IsStatic |
Genera il metodo con la classe invece dello scopo dell'istanza (aggiunge una parola chiave statica al prefisso dell'operazione) |
Il tipo di parametro di restituzione dell'operazione UML diventa il tipo del metodo C++ generato. Se non viene restituito alcun parametro, il tipo restituzione del metodo viene interpretato come vuoto (escluso per le operazioni standard). Per le operazioni che non restituiscono parametri o con più di un parametro viene visualizzata un'avvertenza.
È possibile specificare varie proprietà specifiche per C++ applicando lo stereotipo cpp_operation all'operazione UML:
· isInline: La trasformazione genera l'operazione come in linea (aggiunge il corpo dell'operazione all'intestazione)
· isVirtual: Dichiara l'operazione come funzione virtuale
· isFriend: Genera un'operazione friend
C++ non consente la combinazione di un qualificatore statico con qualificatori friend o virtuali. Per la generazione del codice, la trasformazione preferisce un qualificatore statico.
La trasformazione trasforma i parametri UML in argomenti di operazioni C++. La trasformazione non genera parametri con un tipo "return", ma li utilizza come indicatore del tipo di restituzione dell'operazione. La trasformazione trasforma il tipo del parametro nel tipo di un argomento.
La trasformazione trasforma i parametri con la direzione "out" o "in/out" nei riferimenti (ovvero, aggiunge un qualificatore "&" al tipo di specifica).
La trasformazione utilizza il valore predefinito del parametro per specificare il valore predefinito dell'argomento dell'operazione C++.
Facoltativamente, è possibile applicare lo stereotipo cpp_type al parametro UML. Questo stereotipo dispone di un attributo del qualificatore che è possibile utilizzare per immettere una qualunque stringa come qualificatore per il tipo generato.
Gli esempi di seguito riportati illustrano come alcuni fattori condizionano il codice risultante
· Se il tipo di operazione è specificato (ad esempio, Class1) e non viene specificato il qualificatore o non viene applicato lo stereotipo, il codice generato per l'attributo è "Class1 <ArgumentName>".
· Il tipo di operazione non è specificato e viene applicato lo stereotipo cpp_type e impostata la stringa del qualificatore su "int ", il codice generato è "int <ArgumentName>".
· Se il tipo di operazione è specificato (Class1) e si applica lo stereotipo cpp_type e si imposta la stringa del qualificatore su " * const ", il codice generato è "Class1 * const <ArgumentName>".
La trasformazione aggiunge le classi UML utilizzate dai parametri nell'elenco di inclusione.
La trasformazione genera parametri nell'ordine fornito dal server dei modelli.