La transformation transforme les relations d'association en variables de membre en code C++. Pour les associations de non composition, la transformation ajoute le signe pointeur (*) au qualifiant type de l'attribut. Si vous précisez la multiplicité et la définissez en un nombre spécifique (avec les mêmes plages haut et bas), la transformation ajoute une spécification de tableau à l'attribut.
La transformation utilise les propriétés de fin d'association suivantes pour générer le code :
Propriété |
C++ |
Nom |
Crée une nouvelle variable de membre avec le nom défini (effectue la validation de nom) |
Visibilité |
Détermine la visibilité de la variable de membre généré |
Par défaut, la transformation génère l'héritage public pour la cible de la relation de généralisation UML. La transformation inclut automatiquement le fichier d'en-tête pour la cible dans le fichier d'en-tête généré. La transformation C++ supporte des héritages multiples.
Vous pouvez appliquer le stéréotype cpp_generalization pour préciser la visibilité (public, protégé, privé et par défaut) de la relation de généralisation donnée.
Généralement, une relation "Utilisation" indique la référence à la classe ou l'énumération. Par défaut, une relation d'utilisation se transforme en référence aval dans le fichier d'en-tête généré et en directive "include" dans le fichier de corps.
Si vous appliquez le stéréotype cpp_dependency et définissez son attribut InclusionInHeader en true, la transformation génère l'instruction d'inclusion en en-tête.
Vous pouvez utiliser une relation "Utilisation" pour indiquer des relations d'"amitié" entre les classes en appliquant le stéréotype cpp_friend à la relation. La transformation inclut la clause "friend" dans le fichier d'en-tête généré (par exemple, "friend class Class1;"). La transformation ne génère pas un raccord de corps pour la fonction "friend" et ajoute automatiquement une dépendance sur la classe amie au code généré.
Une classe UML peut implémenter une interface UML. Cette relation devient un héritage public sur la classe C++.
La transformation transforme une classe UML avec paramètres de canevas en classe de canevas.
La transformation considère une classe UML avec une relation "liaison" et une cible de Class1 comme une instanciation de la classe de canevas Class1. La transformation utilise la substitution de paramètre que la relation de liaison définit pour résoudre les paramètres formels en paramètres effectifs.
Un avertissement apparaît si une classe a plusieurs relations de type "Liaison". Si une classe a plusieurs relations de liaison, la transformation utilise la première pour générer le code.
La transformation ajoute les types de données des paramètres effectifs à la liste d'inclusion de classe.
La figure suivante illustre la relation d'instanciation que supporte la transformation dans laquelle une classe est une classe paramétrée et une autre classe est une classe instanciée.
La transformation ne supporte pas les patterns d'utilisation plus complexes des classes de canevas, y compris les variables statiques dans les canevas et les classes paramétrées qui sont utilisées comme paramètres formels.