La trasformazione trasforma relazioni di associazione in variabili di membro nel codice C++. Per associazioni di non composizione, la trasformazione aggiunge il simbolo (*) al qualificatore tipo dell'attributo. Se si specifica una molteplicità e si imposta ad un determinato numero (con le indicazioni dell'intervallo minimo e massimo), la trasformazione aggiunge la specifica di una matrice all'attributo.
Per generare il codice, la trasformazione utilizza le proprietà di fine associazione di seguito riportate:
Proprietà |
C++ |
Nome |
Crea una nuova variabile di membro con il nome specificato (esegue la convalida del nome) |
Visibilità |
Determina la visibilità della variabile del membro generato |
Per impostazione predefinita, la trasformazione genera un'eredità pubblica per la destinazione della relazione di generalizzazione UML. La trasformazione include automaticamente il file di intestazione per la destinazione nel file di intestazione generato. la trasformazione C++ supporta più eredità.
È possibile applicare lo stereotipo cpp_generalization per specificare la visibilità (pubblica, protetta, privata e predefinita) della relazione di generalizzazione data.
In genere, una relazione di "utilizzo" indica il riferimento ad una classe o enumerazione. Per impostazione predefinita, una relazione di utilizzo viene trasformata in un riferimento successivo nel file di intestazione generato e un orientamento "includi" nel file di corpo.
Se si applica lo stereotipo cpp_dependency e si imposta il relativo attributo isInclusionInHeader su true, la trasformazione genera l'indicazione di inclusione nell'intestazione.
È possibile utilizzare la relazione "utilizzo" per indicare le relazioni "friendship" tra le classi applicando lo stereotipo cpp_friend alla relazione. La trasformazione include la clausola "friend" nel file di intestazione generato (ad esempio "friend classe Classe1"). La trasformazione non genera una matrice corpo per le funzioni "friend" e aggiunge automaticamente una dipendenza alla classe friend del codice generato.
Una classe UML può implementare un'interfaccia UML. Questa relazione diventa un'eredità pubblica sulla classe C++.
La trasformazione trasforma una classe UML con i parametri di modello in una classe di modello.
La trasformazione considera una classe UML con una relazione di "bind" con una destinazione di Class1 come istanza della classe del modello Class1. la trasformazione utilizza la sostituzione del parametro specificato dalla relazione di bind per risolvere i parametri formali nei parametri correnti.
Viene visualizzata un'avvertenza se una classe dispone di più di una relazione di "bind". Se una classe dispone di più di una relazione di bind, la trasformazione utilizza la prima per generare il codice.
La trasformazione aggiunge i tipi di dati dei parametri correnti nell'elenco di inclusione delle classi di cui è stata eseguita.
La figura di seguito riportata illustra la relazione di istanza supportata dalla trasformazione, in cui vengono stabiliti i parametri di una classe ed viene eseguita l'istanza di un'altra classe.
La trasformazione non supporta modelli di utilizzo più complessi di classi di modello, comprese le variabili statiche nei modelli e nelle classi di cui sono stabiliti i parametri utilizzate come parametri formali.