Génération de code Java à partir d'un diagramme de classes UML Cedric Dumoulin Objectifs package mypackage; import java.util.Date; Modéliser les classes dans des diagrammes de classes UML Générer le code Java (squelette des classes) à partir du modèle UML /** * */ public class Person { /** Name property */ protected String name; /** birthday property */ /** protected Date birthday; * /** Address property */ */ protected Address address; public class Address { package mypackage; /** /** The town property */ * protected String town; * @return int /** The town property */ */ protected String street; public int getAge() { /** The town property */ return 0; protected String zipcode; } } } Principe de l’application Utilise une approche Ingénierie Dirigé par les Modèles (IDM) Les diagrammes de classes sont définit dans Papyrus (modeleur UML) Passe par un modèle Java intermédiaire définit en EMF : permet de générer les classes Java pour manipuler le modèle + import/export xml Génère le texte à l’aide de template Acceleo modèle UML code Java modèle Java transfo .UML génération Address.java .mjava code Java QVTo Acceleo Person.java Déroulement du projet 1ere partie 2éme partie Générer du texte à partir d’un modèle à l’aide de template avec Acceleo 3éme partie Apprentissage d’EMF – construire un métamodèle, générer les classes de manipulation, manipuler des modèles, customiser le code générer Transformer des modèles – Transformer un modèle de classes UML en notre modèle Java 4éme partie Intégrer l’application dans Papyrus Eclipse Technologies Java Eclipse Environnement de développement pour manipuler les modèles EMF Papyrus Editeur UML 2 – Pour concevoir le métamodèle (grammaire décrivant le modèle) www.eclipse.org/papyrus Pour transformer des modèles Template de génération de code QVTo Acceleo SVN Acquis a la fin du module Introduction à l’approche IDM Construction de métamodèles Génération de texte, à partir de modèles, avec des templates Avec Acceleo Transformation de modèle manipulation avec EMF avec QVTo maîtrise dans Eclipse des environnements de développement Java et modèle Cahier des charges L’objectif de ce projet est de créer une application permettant de générer du code Java à partir d’un modèle UML. Ce modèle UML sera construit à l’aide de diagrammes de classes. Un diagramme de classes UML permet de modéliser des packages, des classes, leurs méthodes, leurs propriétés, leurs relations, des commentaires ... Papyrus, un modeleur UML Open source, sera utilisé pour construire les modèles UML. Une utilisation typique de l’application est : l’utilisateur modélise une application dans Papyrus en utilisant des diagrammes de classes. Il sélectionne une ou plusieurs classe et demande le menu contextuel. Dans ce menu, il choisit « Generate Java ». L’application génère alors le code Java correspondant: package, squelette des classes avec propriétés, signatures des méthodes, javadoc … Une variante consiste a modéliser une application dans Papyrus, puis à sauver le modèle (dans un fichier.uml). L’utilisateur sélectionne alors le modèle (le fichier .uml) et choisit dans le menu contextuel « Generate Java ». L’application ouvre alors le modèle et génére toutes les classes et packages contenus dans le modèle. L’utilisateur peut aussi utiliser des stéréotypes et des valeurs marqués pour enrichir son modèle. Ces stéréotypes et valeurs marquées généreront des annotations Java ou du code supplémentaire. Le corps des méthodes sera laissé vide par défaut, ou avec le code « return null » pour les méthodes retournant une valeur. L’application permettra de spécifier le corps d’une méthode dans le modèle UML sous la forme d’un texte. Si le corps est spécifié, le texte sera inséré dans le corps de la méthode lors de la génération. L’application permettra de surcharger n’importe quel nom en utilisant un profil, des stéréotypes et valeurs marquées. Surcharger consiste à spécifier un nom différent de celui donné dans le modèle UML. Le générateur utilisera le nom surchargé si celui-ci est présent. Si il n’est pas présent, il utilise le nom donné dans le modèle. L’application permet de définir des Datatypes faisant référence à des types préexistant en Java. Les technologies utilisées sont : Java, Papyrus UML et EMF pour construire le modèle, un moteur de templates pour générer le code (Acceleo d’Eclipse ...).