Générer du code Java à l'aide de BoUML

Cette page a été écrite en s'appuyant sur le tutorial «Les classes et la génération de code sous Bouml» qui est diffusé par le site de documentation de BoUML ; vous pouvez le consulter pour plus de détails.

Malgré l'envie qu'on peut en avoir, il ne suffit pas de cliquer le bouton «Generate>Java» qu'on voit apparaître dans le menu «Tools» ou dans les menus contextuels des packages et classes pour générer du code. En effet, depuis UML2, le passage du modèle UML au code se fait en passant par un modèle intermédiaire, le «modèle de déploiement» où à chaque classe on fait correspondre un artefact «source» qui va assurer entre autres la gestion du code interne et la connexion des classes avec des fichiers (on peut par exemple très bien ranger plusieurs classes dans un même fichier source).

Notes :

  • la présence d'un modèle de déploiement présente l'intérêt de bien séparer les informations entre le modèle lui-même et les informations techniques utilisées pour générer le code ; a terme, elle doit faciliter une réelle réversibilité (donc une traçabilité) entre le modèle et le code ;
  • quand on fabrique un modèle par réro-ingénierie, BoUML fabrique automatiquement le modèle de déploiement, il faudra juste penser à créer les artéfacts «source» correspondant aux nouvelles classes ajoutées lors d'un refactoring.

La génération de code java pas à pas

Réglages préliminaires

  • choisir le langage cible du projet : menu «Micellaneous > Java default definition» :!: cette opération est obligatoire, si un langage cible n'est pas sélectionné, aucune génération dans ce langage ne peut avoir lieu ;
  • choisir des commentaires à la mode javadoc : menu «Project > Edit > Edit generation settings», sélectionner l'onglet «Java[1]» et cocher la case «Generate Javadoc style comment».

Mise en place des paquetages et des classes

Le projet est organisé en paquetages qui traduisent l'architecture du programme. Dans chaque paquetage une Class_view va permettre la définition des classes et relations ; un ou plsieurs diagrammes de classes peuvent être associés à ces Class_views.

Lors de l'édition des classes, attributs, méthodes et relations, la sélection de l'onglet «Java» dans le panneau d'édition permet d'avoir une prévisualisation de la génération de code qui sera obtenue :

  • vous constatez que les commentaires que vous avez mis dans le champ Description de l'onglet UML se retrouvent sous forme de commentaire Javadoc dans le code généré, vous avez donc intérêt à bien documenter ce champ au moment de la conception, ceci fera autant de temps gagné par la suite ;
  • vous pouvez faire des adaptations de détail de génération en adaptant le modèle (template) présent dans le champ «Declaration».

Création des artéfacts de déploiement

Si, à ce stade vous essayez d'activer la génération de code (par «Generate > Java»), vous obtiendrez l'erreur : «C1 : does not have associated artifact». En UML 2 les artifacts représentent les fichiers sources, objet, librairie, exécutable, jar etc. La génération produit des fichiers source, et les artifacts sont utilisés pour dire quels sont ces fichiers sources.

Les artifacts doivent être placés dans une deployement_view que vous pouvez créer dans chaque paquetage ; habituellement, on crée une deployement_view correspondant à une class_view dans chaque paquetage (mais ça n'est pas une obligation).

Il faut alors associer les deployement_views aux class_views : ouvrez le dialogue d'édition de la class_view et sélectionnez pour le champ «deployement view» la deployement_view qui a été créée dans le même paquetage. Cette association faite, vous voyez apparaître dans le menu contextuel de chaque classe l'item «Create source artifact» qu'il vous suffit de sélectionner pour créer l'artifact «source» correspondant.

Génération du code

Copie du Tutoriel de Bruno Pagès :

Essayez de nouveau de générer le code, cela est possible en appelant le menu sur chaque classe, ou au niveau des class view les contenant, ou au niveau du package contenant les vues etc jusqu'au niveau du projet. En le faisant au niveau du projet vous demandez la génération de tous les artifact et des classes qui leur sont associées. Provoquer la génération via le menu Tools est une autre façon de demander la génération au niveau projet.

Cette nouvelle tentative de génération de code produira un autre message d'erreur, car BOUML ne sait pas où les fichiers sources doivent être produits : les artifacts donnent le nom des fichiers, pas leur emplacement !

Il est possible d'indiquer un répertoire de génération pour chaque package (vous pouvez également spécifier un namespace, package ou module), il est également possible de spécifier un répertoire de génération (ou un répertoire de base) pour tout le projet via les generation settings. Appelez le menu du projet dans le browser (clic droit sur foo) et choisissez generation settings, allez dans le dernier intercalaire appelé Directory et spécifiez un répertoire pour C++ et Java, par exemple /tmp pour les deux (utilisez d'autres et meilleurs répertoires dans le futur !), validez le changement (bouton Ok).

Maintenant si vous demandez la génération de code, celle-ci se fera. Demandez à générer le code une deuxième fois pour le même langage : la trace indique que rien n'est produit car c'est inutile. Notez que le générateur de code vérifie véritablement que chaque fichier présent a le bon contenu, si vous changez le contenu d'un de ces fichiers à la main et redemandez la génération de code, le fichier en cause sera réécrit. Cela signifie que même si ce n'est pas toujours approprié au niveau vitesse (surtout si seul un fichier est modifié sur 1000), vous pouvez toujours demander la génération au niveau du projet et aucune modification inutile ne sera faite, au plus grand plaisir de vos Makefile et gestionnaires de configuration.

Les réglages possibles

De fait chaque template de classe, méthode, etc peut être adapté individuellement comme nous l'avons vu précédemment, mais on peut également faire des modifications de génération qui vont affecter tout le projet en éditant les generation settings.

bouml/generer_du_code_java.txt · Dernière modification: 2007/10/04 05:42 par deveaux

Informations sur la pratique du Wiki -- Mention légale
Copyright © 2005-07 UBS - IUT de Vannes - Dept Informatique
Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed