TP1 : Le patron Observer

De $1

Version de 06:41, 29 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction exhaustive au projet

L'objectif de ce TP est de vous familiariser avec le projet "creatureSimulator" et de vous apprendre à implémenter un pattern Observer.

Pour cela nous vous proposons de prendre en main le projet "creatureSimulator". Ce projet vise à créer un environnement de simulation pour des créatures. L'archive que nous vous donnons contient les 4 packages principaux du projet (décrit ci-dessous) et un package contenant une classe de lancement de la simulation :

  • creatures : gère les classes concernant les créatures ;
  • creatures.visual : gère la visualisation des créatures ;
  • simulator : gère le moteur de simulation ;
  • visual : gère le moteur de visualisation.

Nous décrivons dans la suite l'ensemble des classes et interfaces du projet représentés dans la figure ci-dessous. td1.png

Package visual

Ce package contient les informations permettant de créer une fenêtre de visualisation pour le simulateur.

Il contient les fichiers suivants :

  • IDrawable : interface définissant les méthodes à implémenter pour un objet représentable dans une fenêtre de visualisation ;
  • Visualizer : classe abstraite implémentant les méthodes principales pour la fenêtre de visualisation.
IDrawable

Cette interface définit un type d'objet représentable dans la fenêtre de visualisation et les méthodes que ce type d'objet doit implémenter.

En particulier un tel objet doit pouvoir donner sa couleur, sa taille et définir une méthode paint pour être en mesure de se dessiner dans un JPanel.

Visualizer

Cette classe abstraite donne les principales méthodes permettant de représenter la fenêtre de visualisation. En outre, la classe définit également la signature d'une méthode abstraite permettant de récupérer un ensemble d'objet de type IDrawable ou hérités : getDrawables

Notez que les méthodes données ici sont implémentées pour gérer toutes les questions de positionnement dans le cadre du projet, vous n'aurez jamais à vous en soucier.

Package creature

Ce package contient l'ensemble des informations pour la manipulation (la simulation) des créatures.

Il contient les fichiers suivants :

  • ICreature : interface définissant les méthodes qu'une créature doit exposer ;
  • AbstractCreature : classe abstraite implémentant la majorité des méthodes d'une créature pour un environnement donné (voir package creatures.visual)
  • StupidCreature : classe représentant une créature "stupide" càd se déplaçant en suivant toujours sa trajectoire initiale.
ICreature

Cette interface définit les méthodes qu'une créature doit exposer pour donner son environnement, sa vitesse, sa direction et sa position.

ICreature hérite de l'interface IActionable (voir package simulator) : une créature peut être simulée au sein du moteur de simulation. Elle hérite également de l'interface IDrawable (voir package visual) : une créature peut être représentée à l'écran. 

AbstractCreature

Une créature possède tous les attributs qui lui permettent de se positionner dans un environnement (position et environment), de se déplacer (speed et direction), d'interagir avec d'autres créatures (fieldOfView -> champ de vision et visionDistance) et d'être représentée à l'écran (size et color).

Elle possède également deux méthodes protégées (et donc accessibles dans les classes héritées) pour se mouvoir (move) et tourner (rotate). 

Enfin, une méthode permettant de dessiner la créature (selon sa taille et son champ de vision) est également fournie (paint).

StupidCreature

L'implémentation de cette créature consiste uniquement en l'implémentation de la méthode act() requis par l'interface IActionable. Dans le cadre de la StupidCreature, cette méthode fait se déplacer la créature en utilisant sa vitesse et sa direction. 

 

Déroulement