Cedric Dumoulin
Générer du code à partir d une description de haut niveau Ce projet vise à fournir un environnement de développement permettant de modéliser des UI Android à un haut niveau d abstraction, puis, en cliquant sur un bouton, de générer le code de bas niveau correspondant. Un utilisateur de l environnement pourra modéliser des UI Android dans un éditeur de modèle de UI, et générer le code correspondant à la UI.
Que veut dire modéliser à un haut niveau d abstraction? Modéliser à un haut niveau d abstraction signifie que l on veut concevoir la UI en manipulant des concepts métier propre à la UI comme Button, Text, Checkbox, etc. Dans cette modélisation, on ne se soucie pas de la plomberie propre à l implémentation de la UI, comme par exemple de devoir déclarer les chaines de caractères.
Comment représenter un modèle? Un modèle peut être représenté de plusieurs façons. Il y a trois grande catégories: les représentations graphique sous forme de graphe, les représentations arborescentes, et les représentations textuelles. La représentation d un modèle s appelle sa syntaxe concrète.
Les principales catégories de syntaxes concrètes La représentions graphique présente le modèle sous la forme d un graphe. Les nœuds sont généralement les concepts manipulés, et les liens sont les relations entre ces concepts. Les nœuds peuvent prendre différentes formes : rectangle, icones, Par exemple, le diagramme de classes UML permet de représenter un modèle UML sous une forme graphique. La représentation arborescente permet de représenté un modèle sous la forme d un arbre. Les nœuds de l arbre sont généralement les concepts du modèles. Par exemple, l explorateur de modèle de Papyrus représente un modèle UML sous la forme d un arbre. Autre exemple : Dans Eclipse, dans l explorateur de package, vous pouvez cliquer sur une classe Java. Vous avez alors une représentation arborescente de cette classe. Une représentation textuelle permet de décrire un modèle sous la forme d un texte. Par exemple, un fichier de code Java est une représentation textuelle d une classe Java.
Comment se présente l éditeur de modèle? L editeur de modèle proposé par l environement peut être graphique, arborescent ou textuel Un éditeur graphique permet principalement de manipuler les concepts sous forme de rectangles (ou d icones), et de relier les concepts entre eux à l aide de liens. Par exemple, le diagramme de classe de UML est un editeur graphique pour UML. Un editeur arborescent permet d editer un modele dans un arbre dont les nœuds representent les concepts. Par exemple, l explorateur de modèle de Papyrus est un editeur arborecent pour UML. Un éditeur textuel permet de décrire un modèle sous la forme d un texte.
Que fournit l environnement de génération de code? Notre environnement doit permettre de modéliser les UI, et de générer le code correspondant. Il doit donc fournir deux composants principaux: Un éditeur de modèle Un générateur de code
L éditeur de modèle L éditeur de modèle doit permettre à l utilisateur final de modéliser sa UI en respectant un langage de modélisation bien défini. L éditeur doit produire un modèle.
Le générateur de code Le générateur de code doit permettre de générer le code Android à partir du modèle produit par l éditeur. Le code produit doit être immédiatement compilable par l environement Android. L utilisateur ne doit pas avoir besoin de modifier manuellement le code produit.
L ingénierie Dirigée par les modèles (IDM) L IDM met le modèle au cœur de la conception d applications L IDM permet de manipuler des modèles (les concevoir, les éditer), de transformer des modèles en d autres modèles (transformation de modèles), de vérifier des modèles, et de générer du texte à partir de modèles.
Métamodèle, syntaxe abstraite Dans l IDM, un modèle doit être écrit en respectant une syntaxe précise (un langage). Ce langage est décrit dans un métamodèle. Le métamodèles définit les concepts utilisables dans le modèle. C est ce qu on appel la syntaxe abstraite d un modèle. Plusieurs frameworks mettent en œuvre l IDM, comme par exemple EMF.
EMF EMF est un framework pour la manipulation de modèles. EMF permet de spécifier des métamodèles (MM), puis, à partir de ces MM de générer des classes Java support du MM. Les classes support du MM fournissent: Un éditeur arborescent. Permettant de faire des modèles conformes au MM. Les modèles peuvent être sauvegardé en XML. Une classe Java pour chaque concept du MM. Cela permet de manipuler un modèle dans un programme Java Des méthodes d import/export du modèle en XML. Cela permet de manipuler un modèle dans un programme en Java, puis de sauvegarder ce modèle dans un fichier XML. Cela permet aussi d importer un fichier XML d un modèle afin de le manipuler dans un programme Java.
MTL / Acceleo MTL est le standard OMG pour générer du texte à partir d un modèle. Acceleo est une implementation de ce standard. La génération de texte se fait à l aide de templates. Un template est un texte avec des points d insertions. Un point d insertion indique un endroit ou le texte doit être généré à partir de valeurs trouvé dans le modèle. Un point d insertion est exprimé à l aide des concepts du métamodèle. Par exemple, un point d insertion va dire qu il faut prendre la valeur de l attribut name du concept de type A. Les point d insertion sont remplacés par les valeurs du modèle par le moteur de génération. Le resultat est un texte conforme au template.
Comment réaliser le projet? Pour réaliser le projet, il faut fournir un environnement avec : Un éditeur de modèle pour construire des UI Android Un générateur de code générant le code à partir des modèles construit avec l éditeur. Les modèles doivent suivre une syntaxe précise. L éditeur doit faciliter l utilisation de cette syntaxe
Réalisation de l éditeur de modèles EMF permet réaliser simplement des éditeurs de modèles arborescent. GMF, et d autres frameworks (XPray, Graphiti,...) permettent de réaliser des éditeurs de modèles graphiques. L apprentissage de ces framework à un cout (en temps) Xtext permet de réaliser des éditeurs de modèles textuels. L apprentissage de ce framework à un cout. Pour notre projet, nous utiliserons EMF.
Réalisation de l éditeur de modèles avec EMF EMF génère automatiquement un éditeur arborescent à partir d un métamodèle (MM). Il faut donc définir le MM, et demander à EMF la génération des classes support.
Projets généré par EMF EMF génére 4 projets à partir d un métamodèle Monprojet Contient les classes support pour le modèle Ce projet peut être le projet de départ de votre conception. Monprojet.edit Contient des classes support pour l édition du modèle Monprojet.editor Contient l éditeur arborescent. Monprojet.tests Contient des classes Java/Junit pour le test unitaire du modèle
L éditeur de modèle concrètement Vous devez concevoir le MM correspondant à votre langage permettant de décrire une UI Android Vous générez les classes Java support du MM. EMF génére l éditeur arborescent. L éditeur de modèle a besoin des jar des projets pour fonctionner Il faut donc lancer un «Eclipse de test» pour tester l editeur, et faire des modèles de UI Android. Revoir votre tutorial EMF Vous pouvez maintenant écrire des modèles décrivant une UI Android.
Réalisation du générateur de code Le générateur de code se fait avec MTL/Acceleo Le générateur consiste à écrire des templates permettant de générer le code UI Android à partir de modèles décrivant cette UI. Un template génère du code à partir d un modèle Ce modèle doit être conforme à un MM Le template s écrit à l aide des concepts du MM! pour générer du code UI Android, votre template doit déclarer qu il utilise le MM UIAndroid
Le générateur de code concretement Il est développé dans son propre projet. Ce projet a besoin des jar des projets du MM pour fonctionner. Il ne peut donc fonctionner que dans «l eclipse de test». Le générateur de code peut être testé dans le même eclipse que son projet. pas besoin d ouvrir un 3eme Eclipse
Le problème Votre métamodèle de UI Android est développé dans votre Eclipse de travail. Mais, il ne peut pas être utilisé dans l Eclipse de travail On ne peut l utiliser que dans l Eclipse de tests La génération de code nécessite de pouvoir utiliser votre MM La génération de code doit être développé dans l Eclipse de tests.
Organiser l environnement Les projets du MM sont dans l éclipse de travail Le projet de génération de code doit être dans l Eclipse de tests Tous les projets doivent être reunis dans un seul espace de travail Facilite la gestion de version (SVN, GIT) Comment faire???
Organiser l environnement Créer tout les projet dans l Eclipse de travail Le projet du metamodeles Et les projets l accompagnant (.edit,.editor) Le projet de generation de code Ne pas générer le templte tous de suite Lancer l Eclipse de tests Importer le projet de génération de code Import SANS copie Vous pouvez maintenant créer un template. le projet est accessible dans les deux Eclipse le projet est physiquement dans l Eclipse de travail