Skip to content

Instantly share code, notes, and snippets.

@RazenIW
Last active December 16, 2020 23:19
Show Gist options
  • Save RazenIW/9125bdcdca5794048c56222889ffd447 to your computer and use it in GitHub Desktop.
Save RazenIW/9125bdcdca5794048c56222889ffd447 to your computer and use it in GitHub Desktop.
TP Java ReadMe
Victor Soufflet et Audrey Brillant, pour le 17/12/2020

TP de Programmation Orientée Objet

Dans ce TP, nous avons 3 packages "application", "donnees" et "gui".

Voici l'arborescence des fichiers qui composent notre projet :

Voici l'arborescence des fichiers du projet

Nous allons passer en revue les attributs et les méthodes de chaque classe tout en expliquant brièvement les intérêts de chacuns afin de mettre en évidence le fonctionnement de l'application.

Des explications plus détaillées quant au fonctionnement des méthodes sont inclues dans le code en tant que commentaires et sont situées aux lignes concernées.

Classe "SimuVirus.java"

Ceci est la classe principale, c'est celle qui fait usage de toutes les autres classes du projet.

Elle étend la classe Application provenant de JavaFX et implémente également sa classe EventHandler permettant de gérer les évènements liés à la souris.

Nous avons en tout 15 attributs et 10 méthodes :

  • Attributs
    • height, width, widthStep, heightStep (double) : Hauteur, largeur, pas largeur et pas hauteur (en pixels).
    • decalage, dim (int) : Décalage et dimension (nous avons dim * dim places dans notre grille).
    • controller (Controller) : Lien vers notre Controller FXML.
    • troupe (Group) : Lien vers notre troupe JavaFX.
    • env (Environnement) : Lien vers notre environnement.
    • littleCycle (Timeline) : Timeline servant à automatiser le comportement des personnes.
    • couleurFond, couleurDomicile, couleurEntreprise, couleurMagasin (Color) : Quelques couleurs...
  • Méthodes
    • void start(Stage primaryStage) : Permet d'initialiser la plupart des attributs et d'afficher la grille ainsi que la fenêtre de contrôle.
    • void construirePlateauJeu(Stage primaryStage) : Permet de construire le plateau de jeu ainsi que sa fenêtre, mais aussi de gérer les cycles.
    • void afficherFenetreControle(Stage primaryStage) : Permet de générer et d'afficher la fenêtre de contrôle (il s'agit d'une page FXML)
    • boolean go() : Permet d'inverser l'attribut "go" et de lancer (ou de mettre en pause) "littleCycle", l'attribut servant à automatiser le comportement des personnes.
    • void dessinEnvironnement() : Permet de dessiner graphiquement l'apparence de l'environnement ainsi que ses places.
    • void ajouterPlaces() : Permet d'ajouter les places qui peuvent être des magasins, des domiciles ou des entreprises que ce soit graphiquement mais aussi physiquement (en mémoire).
    • void ajoutPions() : Permet d'ajouter les personnes à l'environnement ainsi leur représentation graphique à la troupe.
    • @Override void handle(MouseEvent mouseEvent) : Permet de gérer ce qu'il se passe quand l'utilisateur utilise sa souris.
    • void updatePos(PersonneImg img, Point arrivee) : Permet de mettre à jour la position d'une personne mais aussi celle de son image.
    • static void main(String[] args) : Permet d'exécuter le tout.

Classe "Controller.java"

Cette classe représente le Controller qui est reliée à notre document FXML "application.fxml" (la fenêtre de notre panneau de contrôle).

Elle sert à définir toutes les fonctions associées à notre panneau de contrôle, par exemple : l'acquisition des données que l'on souhaite passer à la fenêtre, ce qu'il se passe quand on appuie sur certains bouton, etc...

Certaines méthodes et attributs sont précédées du mot clé "@FXML", cela veut dire que l'on souhaite passer ce qui suit à notre document FXML, pour l'associer à un objet FXML.

Nous avons en tout 5 attributs (dont 4 précédés par "@FXML") et 3 méthodes :

  • Attributs
    • application (SimuVirus) : Représente un lien vers la simulation.
    • @FXML nbPersonnes (TextField) : Représente le champ de texte indiquant le nombre de personnes.
    • @FXML nbInfectes (TextField) : Représente le champ de texte indiquant le nombre de personnes infectées.
    • @FXML boutonPlayPause (Button) : Représente le bouton permettant de lancer ou de mettre en pause la simulation.
    • @FXML status (Label) : Représente l'étiquette indiquant le statut de l'exécution (en pause, en cours d'éxecution).
  • Méthodes
    • void setApplication(SimuVirus _application) : Setter de l'attribut "application".
    • @FXML void playpause() : Permet d'appeler la fonction "go" dans SimuVirus (lance l'animation ou la mets en pause et change les boutons ainsi que le statut en conséquence).
    • @FXML void updateData(Environnement env) : Permet d'actualiser les données de nos champs "nbPersonnes" et "nbInfectes".

Fichier FXML "application.fxml"

Ce fichier contient du code XML contenant les balises qui définissent la structure de la fenêtre de notre panneau de contrôle.

Il est relié à notre Controller dans la balise "AnchorPane" avec le paramètre "fx:controller".

Certains éléments comme les "", ", et "" ont un paramètre "fx:id" qui prends comme valeur le nom de la variable précédée par "@FXML" dans la classe Controller, c'est comme cela qu'on fait le lien entre le fichier FXML et le Controller.

On pourrait développer la fenêtre à la main mais cela serait compliqué, heureuseument nous avons un outil appelé "Scene Builder", qui permet de tout faire graphiquement, au sein de notre environnement de programmation (IntelliJ).

Voici une capture de ce à quoi ça ressemble :

Voici une capture de Scene Builder

C'est beaucoup plus simple à réaliser car on fait les choses graphiquement afin de générer des balises automatiquement.

Classe "Personne.java"

Notre classe Personne représente nos cobayes et définit leurs attributs ainsi que leurs comportements.

Pour cette classe, nous avons en tout 11 attributs et 10 méthodes (dont 2 constructeurs) :

  • Attributs
    • posActuelle, posDomicile (Point) : Points vers la position actuelle et vers le domicile de la personne.
    • lieuActuel, domicile (Lieu) : Lieux correspondants aux points ci-dessus.
    • activite (Activite) : L'activité actuelle de la personne (repos, travail ou course).
    • img (PersonneImg) : Lien vers la représentation graphique de la personne.
    • env (Environnement) : Lien vers l'environnement auquel appartient la personne.
    • malade (boolean) : Indique si la personne est malade (true) ou pas (false).
    • dureeContact, id (int) : Durée de contact avec une autre personne malade et id unique.
    • nb (static int) : Sert juste à attribuer des id uniques.
  • Méthodes
    • Personne(Point pos) : Constructeur prenant comme argument une position
    • Personne(Point pos, Environnement env) : Constructeur reprenant celui ci-dessus mais en ajoutant un lien vers un Environnement.
    • void moveTo(Point pos) : Permet de bouger la personne à un point "pos".
    • void activer() : Permet de déterminer et de déclencher la prochaine activité de la personne en fonction de son activité actuelle.
    • void detecteContagion() : Permet de vérifier si la personne est contaminée, à l'abris ou en contact avec une autre personne contaminée.
    • boolean isMalade(), PersonneImg getImg() : Getters pour les attributs "malade" et "img".
    • void setMalade() : Setter pour l'attribut "malade", remet égalament la durée de contact à 0 et change la couleur de l'image en conséquence.
    • @Override String toString() : Affiche les informations de la personne.

Classe "Environnement.java"

Cette classe représente l'environnement dans lequel tout se passe, il répertorie l'ensemble des personnes et des lieux qui composent notre monde.

Pour cette classe nous avons 5 attributs et 12 méthodes (dont 1 seul constructeur) :

  • Attributs
    • simu (SimuVirus) : Lien vers la simulation.
    • personnes (List) : Liste de personnes se trouvant dans l'environnement.
    • lieux (List) : Liste des lieux se trouvants dans l'environnement.
    • plan (Map<Point, Lieu>) : Map qui associe un Lieu à une position.
    • annuaire (Map<TypeLieu, List>) : Map associant une liste de lieux à un type de lieu.
  • Méthodes
    • Environnement(SimuVirus simu) : Constructeur initialisant la liste et la HashMap et prenant en entrée un lien vers une simulation.
    • void bouger() : Permet de faire bouger toutes les personnes de la liste selon la méthode "activer".
    • void avancerTemps() : Permet d'avancer le temps d'un cran en actualisant les contacts et les contaminations des cobayes.
    • void addPersonne(Personne p) : Permet d'ajouter une personne à la liste.
    • void switchMalade(Point pos) : Permet d'inverser l'état de la dernière personne (celle qui est visible graphiquement) se situant à la position "pos".
    • void updatePos(Personne p) : Mets à jour la position d'une personne "p".
    • List getPersonnes() : Getter de l'attribut "personnes".
    • int getNbInfectees() : Retourne le nombre d'infectés dans l'environnement (utilise une expression lambda).
    • addLieu(Lieu l) : Ajoute un lieu "l" dans la liste des lieux ainsi que dans le plan.
    • creerAnnuaire() : Groupe les lieux par type dans la map "annuaire".
    • Lieu getLieu(Point p) : Retourne le lieu qui se trouve en position "p" s'il existe.
    • Lieu selectLieu(TypeLieu typeLieu) : Retourne un lieu aléatoire selon un type donné.

Classe "PersonneImg.java"

Cette classe n'est que la représentation graphique d'une personne, elle étend la classe "Circle" et reprend donc ses méthodes et ses attributs.

Elle contient en tout 2 attributs et 4 méthodes (dont 1 seul constructeur) :

  • Attributs
    • infected (boolean) : Indique si la personne est infectée (true) ou pas (false).
    • maCouleur (Paint) : Indique la couleur de la personne (rouge pour infectée et blanche pour saine).
  • Méthodes
    • PersonneImg(double x, double y, double rayon, Paint couleur) : Constructeur prenant une position, un rayon et une couleur comme arguments.
    • void switchInfected() : Permet d'inverser l'état de la personne (infecté ou pas) et change sa couleur en conséquence.
    • void setInfected() : Permet de définir l'état de la personne comme "infectée", la couleur est changée en conséquence.
    • String toString() : Affiche les infos quant à la position de l'image.

Classe "PlaceImg.java"

Comme pour les personnes, nous avons une classe représentant les places, et qui étend elle aussi la classe "Circle".

Nous avons en tout 1 attribut et 4 méthodes (dont 1 seul constructeur) :

  • Attributs
    • maCouleur (Paint) : Représente la couleur de la place.
  • Méthodes
    • PlaceImg(double x, double y, double rayon) : Constructeur prenant une position et un rayon comme arguments.
    • Paint getMaCouleur() : Getter de l'attribut "maCouleur".
    • void setMaCouleur(Paint maCouleur) : Setter de l'attribut "maCouleur".
    • @Override String toString() : Affiche les informations quant à la position de l'image.

Classe "Lieu.java"

Cette classe définit ce qu'est un Lieu, et contient une énumération listant les trois types de lieux, c'est à dire "DOMICILE", "ENTREPRISE" et "MAGASIN".

Nous avons en tout 3 attributs et 5 méthodes (dont 1 seul constructeur) :

  • Attributs
    • pos (Point) : Représente la position du lieu sur la grille.
    • type (TypeLieu) : Représente le type du lieu en question, fait référence à l'énumération décrite plus haut.
    • personnes (List) : Liste des personnces se trouvant en ce lieu.
  • Méthodes
    • Lieu(Point _pos, TypeLieu _type) : Constructeur prenant une position et un type de lieu en arguments.
    • void addPersonne(Personne p) : Permet d'ajouter une personne "p" à la liste des personnes présentes en ce lieu.
    • void removePersonne(Personne p) : Permet de retirer une personne "p" de la liste des personnes.
    • Point getPos(), TypeLieu getType() : Getters des attributs "pos" et "type".

Énumération "Activite.java"

Cette énumération se contente de lister les différentes activités que peuvent pratiquer les personnes, c'est à dire :

  • "REPOS"
  • "TRAVAIL"
  • "COURSE"

Et c'est tout.

Capture d'écrans du fonctionnement de l'application

Voici quelques captures qui témoignent du bon fonctionnement de l'application :

Capture 1 Fonctionnement

Capture 2 Fonctionnement

Capture 3 Fonctionnement

Capture 4 Fonctionnement

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment