Transformation UML vers Java


La transformation UML vers Java transforme les spécifications UML 2.0 en classes Java. Vous pouvez utiliser la transformation pour donner des valeurs de départ à un projet Java à partir de spécifications UML 2.0. Vous pouvez aussi appliquer la transformation après avoir donné des valeurs de départ initiales pour fusionner les modèles UML mis à jour avec le code Java existant.
 

1. Mise en route

Avant d'utiliser la transformation d'UML vers Java, vous devez vous familiariser avec la création et l'édition de modèles UML 2.0 et de projets Java.

La procédure suivante montre l'utilisation la plus simple de la transformation Java.

Transformer un modèle UML vers Java :
1. Basculez en perspective Modélisation.
2. Dans la vue Explorateur de modèle, cliquez à l'aide du bouton droit de la souris sur une classe UML (par exemple, Class1).
3. Cliquez sur Transformation > Exécuter la transformation > UML2 à Java.
4. La boîte de dialogue Exécution de la transformation s'ouvre. Cliquez sur le bouton Créer le conteneur de cible.
5. La boîte de dialogue Nouveau projet Java s'ouvre. Entrez simple dans le champ Nom de projet et cliquez sur Fin.
6. Dans la boîte de dialogue Exécution de la transformation, cliquez sur Fin.

Le nouveau projet Java contient un package par défaut qui contient la nouvelle classe Java : Class1.

La transformation peut aussi effectuer plusieurs autres fonctions plus complexes telles que la substitution de noms sans modification du modèle source, le remplacement de l'objet UML avec une visualisation, la fusion de modifications dans le modèle UML et la source Java et enfin, la validation du modèle UML pour les incidents de transformation potentiels.
 

2. Caractéristiques de transformation

2.1 Source de transformation

Vous pouvez sélectionner des modèles UML 2.0, des packages, des classes non imbriquées, des interfaces et énumération non imbriquées comme source pour la transformation. La transformation se poursuit si vous sélectionnez d'autres éléments que la source, mais elle ne transforme pas ces éléments. Lorsque la transformation transforme un modèle, un package, une classe ou une interface, elle transforme aussi tous les éléments que ces objets contiennent. Par exemple, lorsque la transformation transforme une classe, elle transforme aussi toutes les opérations et propriétés de cette classe.
 

2.2 Cible de transformation

Vous pouvez sélectionner n'importe quel projet Java qui a au moins un dossier source comme cible de la transformation.
 

2.3 Interprétation des objets source UML

UML Java 
Package Package Java avec le même nom*
Package stéréotypé <<perspective>> Ignoré
Package avec mot-clé <<Analyse>> ou <<analyse>> Ignoré
Classe Classe Java avec le même nom* et la même visibilité
(Classe) Propriété isLeaf  La classe Java est "finale" si vraie
(Classe) Propriété isAbstract La classe Java est "résumé" si vraie
(Classe) Généralisation La classe Java "agrandit" la superclasse indiquée
Implémentation La classe Java "implémente" la superclasse indiquée
(Classe à interface) Généralisation
La classe Java "implémente" la superclasse indiquée
Interface Interface Java avec le même nom* et la même visibilité 
(Interface) Généralisation L'interface Java "agrandit" la superclasse indiquée
Enumération
Interface Java avec le même nom* et la même visibilité
EnumerationLiteral
Champ Java avec le même nom* et la même visibilité
Opération Méthode Java avec le même nom* et la même visibilité
(Opération) Propriété isStatic La méthode Java est "statique" si vraie
(Opération) Propriété isAbstract La méthode Java est "résumé" si vraie
(Opération) Propriété isLeaf La méthode Java est "finale" si vraie
(Opération) avec le même nom que sa classe Constructeur Java
(Opération) <<créer>> stéréotype Constructeur Java
Paramètre Paramètre Java avec le même nom*
(Paramètre) Propriété de type Le paramètre Java a le type indiqué. Il peut s'agir d'une autre classe ou d'un type primitif
(Paramètre) Propriété de sens La méthode Java a "retour <type de paramètre>" si elle est définie sur "retour" ; sinon, elle ajoute "<type de paramètre> <nom de paramètre>" à la signature de la méthode
(Paramètre) Propriété de multiplicité  Voir le tableau suivant pour avoir des informations sur la multiplicité
Propriété  Champ Java avec le même nom* et la même visibilité
(Propriété) Propriété isStatic Le champ Java est "statique" si vrai
(Propriété) Propriété isLeaf Le champ Java est "final" si vrai
(Propriété) Propriété de type Le champ Java a le type indiqué. Il peut s'agir d'une autre classe ou d'un type primitif
(Propriété) Propriété de multiplicité  Voir le tableau suivant pour avoir des informations sur la multiplicité

*  Certains caractères ne sont pas valides dans les identificateurs Java (comme un espace). La transformation Java remplace automatiquement les caractères non valides par un trait de soulignement (_) afin de créer un identificateur valide. Ce remplacement peut occasionner des conflits de nom qui empêchent la transformation de générer des interfaces et des classes de duplication. Vous pouvez utiliser la fonction de validation pour détecter ces problèmes. Pour éviter ces problèmes de remplacement, renommez les éléments ou utilisez la fonction de mappage pour indiquer un nom secondaire qui ne modifie pas le modèle source.

Types Java pour les propriétés et les paramètres
Multiplicité UML Type Java généré
0..1 Attribut, pointeur ou référence (par exemple, Chaîne)
1 Attribut (par exemple, Chaîne)
N (N > 1)  Tableau (par exemple, Chaîne[])
1..*, *, ou x..y  Collection, voir le tableau suivant

Collections Java pour multiplicités 1..*, * ou x..y

Propriété isOrdered Propriété isUnique Collection UML
Type Java généré
True True Ensemble ordonné
java.util.SortedSet
True False Séquence
java.util.List
False True Défini
java.util.Set
False False Sac
java.util.Collection

Notez que les types générés répertoriés ci-dessus sont des types par défaut.  Ils peuvent être remplacés dans l'onglet Avancé de la configuration de transformation.

Avancé
L'onglet Avancé fournit certaines options de génération de code. cliquez sur Modélisation > Transformation > Configurer des transformations, sélectionnez une configuration UML vers Java, puis sélectionnez l'onglet Avancé.  L'onglet contient la case à cocher Générer "getter " et "setter" et le groupe Collections.  

Lorsque cette cas est cochée, la transformation génère une zone privée avec des méthodes "getter" et "setter" pour chaque propriété UML.  Si la valeur "true" est attribuée à isLeaf (final) ou isReadOnly de la propriété, aucun "setter" n'est généré.  Si la valeur "true" est attribuée à isDerived de la propriété, l'implémentation de "setter" est vide.  

Vous pouvez spécifier les collections générées par la transformation UML vers Java dans le groupe Collections.  Par exemple, sélectionnez "java.util.Vector" dans la liste déroulante Séquence pour que la transformation génère des vecteurs et non des listes. Vous pouvez également préciser des classes de collection personnalisées en entrant le nom de la classe dans la liste déroulante.  Si vous entrez "custom.Bag" dans la liste déroulante Sac, la transformation génère des sacs et non des collections.  

3. Support pour technologies de transformation Common

3.1 Intégration avec support d'équipe

La transformation Java permet l'intégration avec le support d'équipe en permettant le contrôle automatique et l'apport de nouveaux fichiers dans les systèmes de contrôle source.
 

3.2 Mappage de transformation

Vous pouvez indiquer d'autres noms pour les éléments cible de la transformation, si vous ne voulez pas modifier un modèle source pour une transformation. Vous pourrez indiquer d'autres noms si vous souhaitez inclure des caractéristiques de type Java (telles que les règles de dénomination) dans des modèles indépendants de la plate-forme, ou si l'organisation logique du modèle source n'est pas appropriée comme regroupement cible. Pour supporter d'autres noms de cible sans modifier le modèle source, utilisez la fonction de mappage de transformation.
Utiliser la fonction de mappage de transformation :
1. Basculez en perspective Modélisation.
2. Dans la vue Explorateur de modèle, cliquez sur un modèle UML.
3. Sur la barre de menus, cliquez sur Modélisation > Transformation > Configurer les transformations.
4. Créez une nouvelle transformation UML vers Java (par exemple, nommez la transformation Créer le mappage.)
5. Sur la page Mappage, cliquez sur Créer seulement un modèle de mappage (pas de transformation).
6. Indiquez un fichier et cliquez sur Exécuter.

Lorsque vous cliquez sur Créer un modèle de mappage, la transformation Java crée un modèle de mappage qui est  un modèle séparé avec un artefact pour chaque élément transformable. L'artefact fait référence à l'élément transformable original et porte le même nom. Pour indiquer un nom secondaire pour l'élément original, entrez un nom secondaire dans la propriété de nom de fichier de l'artefact. Si vous ne modifiez pas la propriété de nom de fichier de l'artefact, la transformation génère l'élément avec le nom par défaut de l'artefact. Si vous indiquez des noms secondaires pour les packages, ces noms secondaires affectent tous les discriminants de ce package (à moins que le discriminant ne définisse un nom complet). Le tableau suivant donne une liste d'exemples de noms secondaires.
 
Source UML Nom de fichier d'artefact de mappage Java généré
"Package1" ""  "Package1"
"Package2" "com.ibm.test" "com.ibm.test"
"Class1" dans Package1  "" Package1.Class1
"Interface1" dans Package2 "ITestable" com.ibm.test.ITestable
"Class2" dans Package2 "com.ibm.test.Testable" com.ibm.test.Testable

Pour utiliser un modèle de mappage, suivez les étapes ci-dessous :
1. Basculez en perspective Modélisation.
2. Dans la vue Explorateur de modèle, cliquez sur un modèle UML.
3. Sur la barre de menus, cliquez sur Modélisation > Transformation > Configurer les transformations.
4. Créez une nouvelle transformation UML vers Java (par exemple, nommez la transformation Utiliser le mappage.)
5. Sur la page Mappage, cliquez sur Transformer en utilisant un modèle de mappage.
6. Cliquez sur le modèle de mappage que vous avez créé précédemment et sur Exécuter.
Lorsque la transformation s'exécute, elle utilise n'importe lequel des noms secondaires que vous avez indiqués dans le modèle de mappage.
 

3.3 Support de visualisation en place

Si vous ne voulez pas garder le modèle UML original, vous pouvez utiliser les fonctions de visualisation de la transformation pour supprimer les éléments UML et les remplacer par des raccourcis vers les éléments Java générés. Pour configurer la transformation pour la suppression des éléments de modèle UML, cliquez sur Remplacer les éléments UML dans la page Commun de la fenêtre Configuration des transformations. La transformation ne remplace pas les éléments si le remplacement entraîne une perte des données. Par exemple, si les éléments UML contiennent des diagrammes, la transformation supprime les diagrammes et ne peut donc pas remplacer ces éléments.
 

3.4 Appliquer de nouveau

La transformation Java fusionne les modifications en modèle source et code source modifié en utilisant les balises "@generated" dans les documents Java générés. La transformation possède des éléments Java qui sont marqués par "@generated" et les écrase pendant une autre transformation ou les supprime s'ils ont été supprimés du modèle source. Vous pouvez récupérer la "propriété" des éléments en retirant la balise "@generated", ce qui empêche à la transformation d'écraser ou de supprimer les éléments.
 

3.5 Validation

Le plug-in de transformation Java fournit un profil UML que vous pouvez utiliser pour valider les modèles en cas d'incidents de transformation potentiels. Par exemple, les héritages multiples, la généralisation d'offres spéciales et les conflits d'affectation de noms entraînent des erreurs de compilation dans le code Java généré. Pour voir une liste des incidents potentiels qui peuvent se produire dans le code généré, appliquez le profil au modèle source et exécutez la fonction de validation.
 

3.6 Traçabilité

La transformation Java peut créer des relations dérivées, des éléments Java générés à leurs sources UML. Pour créer des relations dérivées, cliquez sur Créer les relations source vers cible dans la page Commun de la fenêtre Configuration des transformations. Lorsque le système visualise l'élément Java généré, cet élément a une relation dérivée vers son élément source.
 
Conditions d'utilisation | Retours d'informations
(C) Copyright IBM Corporation 2004. All rights reserved.