Le but du TP est de décorer un diagramme de classes UML avec des contraintes OCL en utilisant l'éditeur de l'outil Octopus. Cet outil n'est pas un modeleur (pas de représentation graphique du diagramme de classes) mais contient un analyseur syntaxique pour OCL 2.0 qui vous aidera à écrire des contraintes valides. Octopus possède aussi un générateur de code (type génération de code Objecteering) dont on ne se servira pas. En fin de TP on verra comment générer du code, mais on n'ira pas jusqu'à écrire le code fonctionnel de l'application. Les contraintes écrites dans ce TP ne seront donc pas validées par un test dynamique mais seulement syntaxiquement (c'est mieux que rien...).
Octopus est un plug-in Eclipse. Il n'est censé tourner que sur Eclipse 3.1, mais sauf preuve du contraire ça passe avec la version 3.2. Par contre Octopus ne fonctionne qu'avec Java 5 (erreurs cabalistiques si vous restez en 1.4). Octopus n'est pas installé, c'est à vous de faire l'installation. Le pluggin sera installé sur votre compte ou sur le /tmp de la machine, dans un répertoire qui totalise 3.14mo. Vous pourrez l'effacer à la fin de la séance.
Surtout, si vous avez envie de travailler avec une version d'Eclipse différente de votre version habituelle, il ne faut pas utiliser le même workspace. Vous risqueriez de perdre votre travail. Pour fixer au lancement le workspace :
eclipse -data monNouveauWS
Le plus simple est de demander à eclipse de demander à chaque lancement le workspace à utiliser.
au M5 :
/usr/local/eclipse/eclipse : 3.1 /usr/local/eclipse32/eclipse/eclipse : 3.2
Bon à savoir : eclipse crée dans votre workspace un répertoire caché .metadata qui devient vite énorme. Ce répertoire contient tout l'historique de vos commandes effectuées sous Eclipse (permet par exemple de retrouver ses projets de prédilection ouverts à l'utilisation suivante). Vous pouvez le supprimer.
L'archive contenant le pluggin (octopus-update-site.zip) est dans le répertoire /home/enseign/SVL/tpOcl. On peut aussi la trouver sur le site de Klasse Objecten, la société qui a développé Octopus. Recopier cette archive dans le /tmp de la machine, et dézipper cette archive (produit un répertoire octopus-update-site).
Assurez-vous par which java que vous utilisez bien Java5. Si ce n'est pas le cas :
export PATH=/usr/java/jdk1.5.0_03/bin:$PATH
Commencer par lancer la version d'eclipse de votre choix en spécifiant éventuellement un workspace autre que celui utilisé habituellement. Ensuite, dans le menu Help, sélectionner Software Updates. Ensuite il suffit d'enchaîner les écrans.
Cocher "Search for new features to install", puis cliquer sur "Next".
Cliquer sur "new Local Site" et indiquer le chemin de du répertoire octopus-update-site. Ensuite terminer par "Finish".
Sélectionner octopus-update-site. Terminer par "Next".
Accepter les termes de la licence, puis cliquer sur "Next" et terminer par "Finish".
C'est bientôt fini ! Par défaut les pluggins sont installés dans /usr/local/eclipse mais vous n'avez pas les droits en écriture sur ce répertoire. Il faut dc indiquer un répertoire local (par exemple /tmp), dans lequel sera créé automatiquement un répertoire eclipse.
Cliquer donc sur "Change location", ce qui ouvre une fenêtre "New Update Site". Cliquer sur "Add Location", sélectionner le répertoire de votre choix, terminer par "Finish".
Enfin cliquer sur "installAll" et demander qu'Eclipse soit relancé. L'installation d'Octopus se traduit par 2 icônes supplémentaires ("show UML model in model view" et "add Octopus nature") et des entrées supplémentaires dans les menus contextuels.
Suivant l'organisation d'Eclipse, l'espace de travail d'Octopus est structuré en projets. Chaque projet contient des modèles UML (stockés traditionnellement dans un répertoire model) et des contraintes OCL (stockées traditionnellement dans un répertoire expressions).
Les diagrammes de classe UML sont décrits dans un format propre à Octopus dans des fichiers .uml, ou importés au format XMI (exportés par certains modeleurs). Les contraintes OCL sont stockées dans des fichiers .ocl à raison d'un paquetage par fichier.
Octopus pose sur la norme OCL les restrictions suivantes :
Récupérer l'archive gestionBanque.zip dans /home/enseign/SVL/tpOcl. Elle contient un répertoire model et un répertoire expressions.
Créer dans le gestionnaire de paquetages un nouveau projet Java appelé bankApplication. Dans les options de création :
On ne se servira pas de la perspective Java pour ces tps.
Importer l'archive gestionBanque.zip par un clic droit puis «import» puis «archive file». Les répertoires model et expressions doivent apparaître dans le gestionnaire de paquetages sous votre projet bankApplication.
Choisir dans le menu contextuel associé au projet le menu «Octopus» puis «Add Octopus Nature». Les fonctionnalités du plug-in Octopus sont désormais applicables au projet.
Choisir dans le menu contextuel associé au projet le menu «Octopus» puis «show model». Une vue (model view) du modèle UML contenu dans le fichier exCours.uml s'affiche à droite (si elle s'affiche en bas, un drag and drop peut la placer à droite).
Cette vue est une hiérarchie arborescente du diagramme de classe (paquetage, classe, attribut, etc). Les associations apparaissent de deux manières:
Cette vue arborescente du modèle montre aussi les expressions OCL qui y sont rattachées, chaque expression apparaissant sous l'élément qui lui sert de contexte.
Un double-click dans la vue modèle sur un élément de modèle ouvre le fichier exCours.uml en surlignant la définition de l'élément. De même un double-click sur une expression OCL ouvre le fichier exCours.ocl.
La sauvegarde du projet ou d'un fichier déclenche son «build», soit son évaluation syntaxique (fichiers .uml et .ocl).
Si ce n'est pas déjà fait :
Ajouter les contraintes suivantes (en n'oubliant pas de valider leur syntaxe avec Octopus) :
Le but ici n'est pas d'exécuter l'application gestion de banque. On va simplement demander à Octopus de générer du code Java pour l'application incluant les contraintes OCL attachées au modèle, et observer le code pour voir comment sont traduites les expressions OCL. Cette partie du TP peut être traitée même si la partie prédédente n'a pas été terminée.
Le code Java généré par Octopus contient des assertions Java (assert). Vérifier que le compilateur Java les accepte sous Eclipse : dans les propriétés du projet, pour les propriétés générales du compilateur Java :
À voir dans ce code :
À noter que comme Octopus ne gère pas les post-conditions on ne peut regarder ni la gestion des valeurs @pre, ni la gestion des oclIsNew().