Conception UML / JAVA
23 et 30 octobre 2008

 

Objectifs

Concevoir une application Java en utilisant UML, utiliser quelques patrons GRASP, GoF ou autres. Faire un peu de ré-ingénierie de code. Utiliser un outil UML pour dessiner des diagrammes, explorer la pro et la rétro-ingénierie objet.

Environnement

Vous utiliserez UML en mode esquisse, sur papier et outil UML. Vous vous essaierez également à la pro-ingénierie et à la rétro-ingénierie avec un outil UML.

L'outil de conception UML installé cette année à l'UFR Informatique est Objecteering, qui permet de faire du roundtrip engineering en Java.

Déroulement

On reprendra la thématique générale des tortues qui jouent au ballon, pour reconcevoir une nouvelle application. La conception se fera en deux étapes. La première concernera la ré-ingénierie (refactoring) du code des Tortues utilisé au TP1, afin de rendre les packages plus modulaires. La seconde sera dédiée à la conception d'une application permettant à deux équipes de Tortues de jouer au ballon. L'introduction au TD-TP consiste à jouer un peu avec des outils UML.

Durant la première séance (TD), on s'occupera de conception papier. Il conviendra de se lancer dans les étapes informatiques sans tarder, sans attendre le TP du 30 octobre.

Introduction : outils UML

Découvrir l'outil Objecteering

Objecteering est un des outils disponibles à l'UFR informatique pour la modélisation et le roundtrip engineering.

Lancez-le est explorez son interface, réalisez quelques diagrammes.

Mettez rapidement en place un cycle de roundtrip engineering, par exemple sur les Tortues du package logo de base. Vous pouvez également essayer d'utiliser Obecteering dans Eclipse comme indiqué sur la documentation Objecteering / Eclipse.

Rétro-ingénierie de diagrammes d'interactions avec EclipseUML

L'outil EclipseUML propose dans sa version gratuite la rétro-ingénierie de diagrammes de collaboration et de séquence.

Créez ou ouvrez un projet avec quelques classes Java (votre projet du TP1 par exemple ou bien le package logo de base).

Explorez la rétroingénierie de diagramme de classes (menu contextuel UML), puis de collaboration et de séquences (sélectionnez une méthode, puis utilisez les sous-menu de Open dans le menu contextuel).

Au cours du projet, vous pourrez utiliser un ou plusieurs outils UML de votre choix (la compatibilité est en principe assurée par le format XMI), en mettant en place un cycle de roundtrip engineering.

Partie 1 : Ré-ingénierie du code (TP)

Le code qui est fourni dans logo.zip est un package relativement fouillis. Toutes les classes sont dépendantes les unes des autres, les couches graphique et métier ne sont pas séparées.

Le premier travail va donc consister à reconcevoir le code (et le modèle) de telle sorte que le pattern MVC soit appliqué (trois couches : Modèle, Vue, Contrôle). Pour cela, créez un diagramme de classes/packages qui réorganise les éléments de l'application logo (affichage des tortues et IHM d'un côté, gestion de la tortue, de ses déplacements de l'autre). Les changements dans le modèle métier (déplacements de la tortue) auront pour conséquence un affichage différent. L'utilisation de l'IHM (boutons) entraînera des changements dans le modèle métier en passant par le contrôleur. On considérera dans cette partie une IHM simplifiée, qui permet juste de commander une Tortue dans ses déplacements (avant, arrière, droite, gauche).

Vous pouvez procéder de deux manières : soit y aller pas à pas, soit reconcevoir entièrement dès le départ.

Quelques URLs liées à MVC pouvant être utiles : http://csis.pace.edu/%7Ebergin/mvc/mvcgui.html,http://www.leepoint.net/notes-java/GUI/structure/40mvc.html, http://java.sun.com/developer/technicalArticles/javase/mvc/, http://www.java2s.com/Code/Java/Design-Pattern/MVC-Pattern.htm.

Partie 2 : Conception/codage de l'application (TD)

L'objectif de l'application est de permettre à un utilisateur de faire jouer au ballon l'une contre l'autre deux équipes de joueurs/tortues. Le jeu se passera sur un terrain muni de deux enbuts, l'arrivée du ballon dans l'enbut de l'adversaire permettra à une équipe de marquer un point. Un match s'interrompra au bout d'un certain temps.

Chaque équipe aura une tactique de jeu, qu'elle pourra changer en cours de partie (action utilisateur). Une tactique concerne la manière de faire réagir une équipe de tortues de façon globale : mouvements, passes, etc. Une tactique peut dépendre de la position des tortues sur le terrain, de leurs caractéristiques individuelles, de leurs positions respectives, de l'équipe adverse, etc. On définira au moins trois tactiques différentes.

Les caractéristiques individuelles d'une tortue concernent sa manière de réagir quand elle a ou n'a pas la balle, en fonction de son placement sur le terrain, de la proximité des adversaires, etc. Elles correspondent à ce la détermination de la réaction locale de la tortue. On pourra par exemple avoir des défenseurs et des attaquants, des rapides et des lents, etc.

L'action d'une tortue sera donc déterminée d'une part par la tactique employée dans son équipe, d'autre part par ses caractéristiques individuelles. A vous d'imaginer comment vous gérerez ces deux informations.

L'utilisateur devra au minimum pouvoir lancer un match entre deux équipes, l'interrompre, changer la tactique d'une équipe en cours de jeu.

On disposera pour suivre le jeu de trois fenêtres graphiques (au minimum, vous pouvez imaginer d'autre chose)

Ceci sera rendu aisé du fait de l'utilisation d'une conception de type MVC, l'utilisation de patterns Factory, etc.

Conception du jeu par équipes (TD)

Génération du code et rétro-ingénierie (TP)

Une fois vos classes de conception à peu près stabilisées, utilisez un outil UML pour créer un diagrammes de classes correspondant.

Générez ensuite le code correspondant à votre projet, et mettez en place la procédure de roundtrip pour synchroniser en permanence code et modèle.

Codez vos classes, améliorez la conception, testez, en gardant synchrones modèle et code.

Rendu du travail

Le TD/TP est à rendre pour le mercedi 12 novembre.

Il est impératif d'aller voir et de respecter les instructions générales pour le rendu de TP.

Vous enverrez à yannick.prie (a) liris.cnrs.fr une archive (zip uniquement) contenant : 

N'oubliez pas de demander un accusé réception.

Remarque

Le rapport sur le projet présentera les principaux diagrammes réalisés et illustrant les choix de conception (une dizaine de pages). Vous pourrez faire quelques remarques éventuelles sur l'outil UML utilisé (fonctionnement, praticité, intégration IDE, paramétrage, comparaison à d'autres outils, etc.), n'oubliez pas mettre en évidence les patterns utilisés, etc.

Barême