Conception UML / JAVA

Objectifs

Concevoir une application Java en utilisant UML, utiliser des 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 à l'utilisation de UML en mode plan (pro-ingénierie et rétro-ingénierie).

L'outil de conception UML disponible à l'UFR est Netbeans.

Application à construire

On reprend la thématique générale des tortues qui jouent au ballon, pour reconcevoir une nouvelle application.

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érez 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)

L'application sera construire en utilisant une conception en couches de type MVC et en utilisant des patterns variés.

Déroulement

Introduction : outils UML

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

Mettez rapidement en place un cycle de roundtrip engineering, par exemple sur les Tortues du package logo de base.

Au cours du projet, en phase codage, vous pourrez utiliser l'outil UML de votre choix en mettant en place un cycle de roundtrip engineering.

La suite du travail peut être organisée en deux étapes :

Partie 1 : Ré-ingénierie du code

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 (pas forcément le plus difficile).

Quelques pages liées à MVC pouvant être utiles : ici et

Partie 2 : Conception/codage de l'application

Déterminez les règles de votre jeu.

Faites un modèle du domaine du jeu de ballon que vous voulez mettre en place : joueurs, caractéristiques joueurs, ballon, tactique, etc. Organisez vos classes dans les packages qui vous semblent pertinents.

Décrivez l'unique cas d'utilisation de façon détaillée (notamment les étapes et extensions).

Créer un nouveau modèle appelé Modèle de conception. Réutilisez le modèle correspondant au code mis en place dans la partie 1 (MVC) et complétez-le au niveau du M par des classes dont les noms / attributs sont issus du modèle du domaine.

Complétez votre conception pour réaliser des scénarios correspondant à des interactions différentes au cours du jeu (création du jeu, phase où une équipe à la balle, passe d'une balle, etc.), notamment avec des diagrammes de séquence. Faites évoluer les classes avec les besoins identifiés, en complétant petit à petit attributs et méthodes (jusqu'à ce que vous pensiez que vous pouvez passer au codage). Utilisez diagrammes d'activités et de machine d'états pour illustrer les différents fonctionnements : système, équipe, joueurs, etc.

Une fois vos classes de conception à peu près stabilisées, générez 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 2/11/2009 (2A INFO EPU et M1 IF).

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 de mettre en évidence les patterns utilisés, etc.

Barême