Skip navigation

Nous avons dans le dernier post vu qu’on peut définir le modèle d’un modèle, à savoir le métamodèle, et ainsi en créer des instances, ces fameux modèles.

Maintenant nous allons voir qu ‘on peut, à partir d’une instance de métamodèle, générer du code.

Je vais ici utiliser Acceleo, cadre applicatif qui se prête très bien au jeu🙂

Voici le code du template class.mt

<%
metamodel /metamodels/php5/php5.ecore
import templates.php5.method
import templates.php5.property
import templates.php5.classifier_constant
%>

<%script type= »Classes.Class » name= »genAbstract »%>
<%if (metamodel::isAbstract){%>abstract <%}%>

<%script type= »Classes.Class » name= »genClass » file= »<%name%>.txt »%>
<%script::genAbstract%>class <%name%><%script::genExtends%><%script::genImplements%>{
// CONSTANTS
<%if (constants.nSize()> 0){%><%script::genConstants%><%}%>

//PROPERTIES
<%if (properties.nSize()> 0){%><%script::genProperties%><%}%>

//METHODS
<%if (properties.nSize()> 0){%><%script::genMethods%><%}%>

}

<%script type= »Classes.Class » name= »genExtends »%>
<%if (metamodel::extends.nSize() > 0){%> extends <%metamodel::extends.nGet(0).name%><%}%>

<%script type= »Classes.Class » name= »genImplements »%>
<%if (metamodel::implements.nSize() > 0 ){%> implements <%metamodel::implements.name.sep(« , »)%><%}%>

La première ligne déclare le métamodèle utilisé par ce template. Il peut y en avoir plusieurs, faisant appel à plusieurs métaclasses de plusieurs métamodèles différents.
Les trois lignes qui suivent importent des fichiers tel que celui-ci dans l’espace de nom du compilateur Acceleo. Ainsi depuis ce template je peux appeller des scripts déclarés dans d’autres templates.

En fait un template contient des scripts, et un script se rapporte à une métaclasse. Prochainement, le métamodèle d’Accéléo, promis.

Maintenant, réalisons un modèle exemple de notre méta-modèle Php 5 :

myClass et myExtendingClass

myClass et myExtendingClass

Pour faire simple, il n’y a que deux classes, myBaseClass et myExtendingBaseClass. La première déclare une constante, une propriété et une méthode ayant un paramètre. L’autre classe ne fait qu’étendre la première.

Après avoir chargé le template à l’aide de l’éditeur reflexif Acceleo, on clique sur « source » (sur l’image en bas à droite) et on voit la prévisualisation du résultat de la génération, wonderfull world.

Previsualisation temps reel du résultat de l'exécution du template de metaclasse Classes.Class

Et voilà, on y est ! Il ne reste plus qu’à générer !

Maintenant, imaginez posséder le méta-modèle d’un système d’information (imaginez ce que vous voulez être comme étant un système d’information).

Modélisez-le, et générez-le.

A bientôt !

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :