Transformation de modèle à modèle générant plusieurs objets à partir d'un seul objet d'entrée - Configuration de l'exemple

Cet exemple montre comment utiliser des déclarations de mappage interdépendantes pour générer plusieurs objets à partir d'un seul objet d'entrée.
Avant de commencer
Pour installer et configurer les ressources de l'exemple, reportez-vous à la rubrique "Transformation de modèle à modèle générant plusieurs objets à partir d'un seul objet d'entrée - Instructions de configuration".
Pourquoi et quand exécuter cette tâche
Cette transformation génère plusieurs objets connexes à partir d'un seul objet d'entrée sans nécessiter d'écriture intensive de code personnalisé de la part de son auteur.
  1. Dans la vue Explorateur de projets du plan de travail d'exécution, développez la branche du projet source, puis la branche Modèles et enfin la branche Source1. Source1 contient un package qui lui-même contient deux classes : A et B.
  2. Développez la branche du projet cible et faites un double clic sur le fichier de configuration de transformation nommé transform source1 to target1.tc.
  3. Dans l'éditeur de configuration de transformation, cliquez sur Exécuter.
  4. Dans le projet cible, développez la branche Modèles, puis la branche Target1. Notez que, pour chaque classe dans le modèle d'entrée, la transformation a créé les éléments suivants :
    • Une interface, dont le nom est celui de la classe source précédé de la lettre "I"
    • Une classe d'implémentation, dont le nom est celui de la classe source précédé de la chaîne "Impl"
    • Une réalisation d'interface partant de la classe d'implémentation pour aboutir à l'interface
Résultats

Pour voir de quelle manière la transformation fonctionne, le mieux est d'étudier le problème qu'elle résout : supposons que vous ayez à créer une transformation et que vous vouliez utiliser la déclaration de mappage Class2InterfaceRealization dans la déclaration de mappage Package2Package afin de créer la réalisation d'interface. Cependant, la fonction cible du mappage de type sous-mappe, qui est une réalisation d'interface d'une classe UML, n'est pas visible dans la déclaration de mappage Package2Package. Comment peut-on effectuer un mappage vers cette fonction cible manquante ?

Remarque : Les numéros cités dans la description qui suit correspondent aux repères numérotés sur l'illustration d'accompagnement.

Pour fournir une réalisation d'interface en guise de cible, vous créez une sous-mappe de la fonction packagedElement à la fonction packagedElement dans la déclaration de mappage Package2Package (repère 1 sur la figure). Cette sous-mappe référence récursivement sa déclaration de mappage parente, Package2Package, assurant ainsi le support des packages imbriqués et de leur contenu. A présent, vous pouvez donc définir d'autres sous-mappes entre la fonction packagedElement et la fonction packagedElement. Ces sous-mappes supplémentaires peuvent référencer d'autres déclarations de mappage : Class2Class (repère 2) et Class2Interface (repère 3).

Lorsque vous créez la déclaration de mappage Class2Class, vous pouvez utiliser une sous-mappe (repère 4) dont l'entrée est l'élément Class tout entier. Pour la sortie, sélectionnez interfaceRealization. Le résultat de cette action est la mise à disposition de la déclaration de mappage Class2InterfaceRealization, avec laquelle vous créez deux sous-mappes supplémentaires (repères 5 et 6) qui utilisent également comme entrée l'élément Class tout entier et comme sortie la fonction supplier pour l'une et la fonction client pour l'autre. Lorsque vous générez le code de transformation, les sous-mappes définies ici ne créent pas d'objets de sortie, mais des références aux objets de sortie créés par les transformations qui sont générées à partir des autres déclarations de mappage.

Lorsque vous générez le code de transformation, les fonctions de sortie supplier et client doivent toutes les deux référencer les objets UML qui ont été générés à partir des objets UML d'entrée. Pour spécifier les objets de sortie à référencer, écrivez les définitions des sous-mappes de sorte qu'elles identifient la déclaration de mappage, Class2Class ou Class2Interface, dont la transformation résultante est responsable de la génération de l'objet de sortie correspondant, Class ou Interface, à partir de la même entrée.

Pour plus de détails, étudiez l'exemple de configuration de transformation illustré ci-après. Dans cette figure, les flèches pointant d'une sous-mappe vers l'en-tête d'une déclaration de mappage indiquent que la sous-mappe en question référence la déclaration de mappage. Par exemple, la flèche repérée "1" référence la déclaration de mappage Package2Package.

Diagramme composite montrant les relations entre déclarations de mappage dans l'exemple de transformation
Information associée
Transformation de modèle à modèle générant plusieurs objets à partir d'un seul objet d'entrée - Instructions de configuration

Vos commentaires