cnam:utc503:td2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
cnam:utc503:td2 [2024/09/05 13:07] jcheroncnam:utc503:td2 [2025/09/09 13:09] (Version actuelle) jcheron
Ligne 71: Ligne 71:
   * Comment le constructeur facilite-t-il l’instanciation de nouveaux produits ?   * Comment le constructeur facilite-t-il l’instanciation de nouveaux produits ?
  
-==== Exercice 4 : Classe pour les Vecteurs ====+===== Exercice 4 : Classe pour les Vecteurs =====
  
 Objectif : Travailler sur la surcharge des méthodes et l’instanciation. Objectif : Travailler sur la surcharge des méthodes et l’instanciation.
Ligne 86: Ligne 86:
   * Une méthode **soustraire** qui accepte un autre vecteur ou deux coordonnées séparées et retourne la différence des vecteurs ou de leurs coordonnées.   * Une méthode **soustraire** qui accepte un autre vecteur ou deux coordonnées séparées et retourne la différence des vecteurs ou de leurs coordonnées.
  
-=== Exemple : ===+==== Exemple : ====
  
  
Ligne 96: Ligne 96:
 </sxh> </sxh>
  
-=== Questions : ===+==== Questions : ====
  
  
   * Comment la surcharge de la méthode ajouter permet-elle de gérer différents types d'arguments ?   * Comment la surcharge de la méthode ajouter permet-elle de gérer différents types d'arguments ?
   * En quoi le constructeur facilite-t-il l'instanciation de nouveaux vecteurs ?   * En quoi le constructeur facilite-t-il l'instanciation de nouveaux vecteurs ?
 +
 +
 +===== Exercice 5 : Héritage et Polymorphisme avec des Animaux =====
 +
 +Objectif : Travailler sur l'instanciation, les constructeurs et la surcharge.
 +
 +  * Créer une classe **Animal** avec un attribut nom et une méthode parler qui retourne une chaîne de caractères indiquant que l'animal ne parle pas.
 +  * Créer des classes dérivées **Chien** et **Chat** qui héritent de Animal :
 +    * Chien doit surdéfinir la méthode parler pour retourner "Ouaf".
 +    * Chat doit surdéfinir la méthode parler pour retourner "Miaou".
 +  * Créer un programme utilisant une liste d'animaux et faisant appel à leur méthode parler.
 +
 +==== Questions : ====
 +
 +  * Comment la surdéfinition (overriding) est-elle utilisée pour implémenter le polymorphisme ?
 +  * Que se passe-t-il si on ajoute un nouvel animal, par exemple un Oiseau, avec sa propre méthode parler ?
 +
 +
 +===== Exercice 6 : Bibliothèque de Livres =====
 +Objectif : Travailler sur l'instanciation, les constructeurs, l'encapsulation et les associations entre classes.
 +
 +Crée une classe **Livre** avec les attributs privés suivants :
 +
 +  * titre (chaîne de caractères)
 +  * auteur (chaîne de caractères)
 +  * isbn (chaîne de caractères)
 +  * nombrePages (entier)
 +
 +Implementer les méthodes suivantes :
 +
 +  * Un constructeur qui initialise un livre avec un titre, un auteur, un ISBN et un nombre de pages.
 +  * Des méthodes getTitre, getAuteur, getIsbn et getNombrePages pour accéder aux attributs.
 +  * Des méthodes setTitre, setAuteur, setIsbn, et setNombrePages pour modifier ces attributs.
 +
 +Créer ensuite une classe **Bibliotheque** avec les attributs suivants :
 +
 +  * nom (chaîne de caractères)
 +  * adresse (chaîne de caractères)
 +  * livres (liste d'objets Livre)
 +
 +Implementer les méthodes suivantes :
 +
 +  * Un constructeur pour initialiser une bibliothèque avec un nom, une adresse, et une liste vide de livres.
 +  * Une méthode ajouterLivre qui permet d'ajouter un livre à la bibliothèque.
 +  * Une méthode afficherLivres qui affiche la liste des livres avec leur titre, auteur et ISBN.
 +  * Une méthode rechercherLivre qui permet de rechercher un livre par son ISBN et le retourne.
 +
 +==== Question ====
 +  * Représenter le diagramme de classes
 +
 +
 +===== Escape game =====
 +
 +Objectif : Concevoir et implémenter un système simplifié pour un escape game en mode console. Les joueurs devront résoudre des énigmes dans des salles thématiques pour s’échapper avant la fin du temps imparti.
 +
 +==== Consignes Générales ====
 +
 +  * Travail en binôme.
 +  * Langage : Java.
 +
 +
 +
 +
 +==== Cahier des Charges ====
 +
 +=== 1. Classes à Implémenter ===
 +<html><div class="imageB"></html>
 +<uml>
 +@startuml EscapeGame_POO_Base
 +
 +' ========== CLASSES ==========
 +class EscapeGame {
 +  - salles: List<Salle>
 +  - joueurs: List<Joueur>
 +  + ajouterSalle(Salle): void
 +  + demarrerPartie(Joueur, Salle): void
 +  + afficherClassement(): void
 +}
 +
 +class Salle {
 +  - nom: String
 +  - enigmes: List<Enigme>
 +  - tempsLimite: int
 +  - estTerminee: boolean
 +  + ajouterEnigme(Enigme): void
 +  + resoudreEnigme(String, String): boolean
 +  + estTerminee(): boolean
 +  + afficherEnigmesNonResolues(): void
 +  + toString(): String
 +}
 +
 +class Enigme {
 +  - titre: String
 +  - description: String
 +  - codeSolution: String
 +  - estResolue: boolean
 +  + resoudre(String): boolean
 +  + estResolue(): boolean
 +  + toString(): String
 +}
 +
 +class Joueur {
 +  - pseudo: String
 +  - score: int
 +  - sallesTerminees: List<Salle>
 +  + ajouterSalleTerminee(Salle): void
 +  + afficherStatistiques(): void
 +}
 +
 +' ========== RELATIONS ==========
 +EscapeGame "1" *-- "0..*" Salle : contient >
 +EscapeGame "1" *-- "0..*" Joueur : enregistre >
 +Salle "1" *-- "1..*" Enigme : contient >
 +Joueur "1" -- "0..*" Salle : a terminé >
 +
 +' ========== NOTES ==========
 +note top of EscapeGame
 +  **Classe principale**
 +  Gère les salles et les joueurs.
 +  Peut lancer une partie.
 +end note
 +
 +note right of Enigme
 +  **Une énigme peut être :**
 +  - Un code à deviner
 +  - Un objet à trouver
 +  - Une devinette
 +end note
 +
 +note left of Salle
 +  **Une salle a :**
 +  - Un temps limite (en minutes)
 +  - Plusieurs énigmes à résoudre
 +end note
 +
 +@enduml
 +
 +</uml>
 +<html></div></html>
 +==== 2. Fonctionnalités ====
 +=== 🔹 Gestion des Énigmes ===
 +**Une énigme a (attributs) :**  
 +  * Un titre et une description (affichés en console).
 +  * Un code solution (ex : "CLEF", "1984", "MIROIR").
 +  * Un état (resolue ou non).
 +
 +
 +**Méthodes :**
 +  * resoudre(String tentative) : Compare la tentative du joueur au code solution.
 +  * toString() : Affiche l’énigme de manière lisible (sans spoiler la solution).
 +
 +
 +
 +== 🔹 Gestion des Salles ==
 +
 +
 +**Une salle a :**
 +  * Un nom (ex : "La Bibliothèque Maudite").
 +  * Une liste d’énigmes.
 +  * Un temps limite (en minutes, simulé en console).
 +
 +
 +**Méthodes :**
 +  * ajouterEnigme(Enigme) : Ajoute une énigme à la salle.
 +  * resoudreEnigme(int index, String reponse) : Tente de résoudre une énigme par son index.
 +  * estTerminee() : Retourne true si toutes les énigmes sont résolues.
 +
 +
 +
 +== 🔹 Interaction en Console ==
 +
 +
 +**Le programme doit permettre de :**
 +  * Afficher les énigmes disponibles dans une salle.
 +  * Sélectionner une énigme (par numéro) et entrer une réponse.
 +  * Recevoir un feedback (ex : "🔓 Énigme résolue !" ou "❌ Mauvaise réponse").
 +  * Passer à la salle suivante si toutes les énigmes sont résolues.
 +
 +== Règles de gestion supplémentaires ==
 +  * Une salle doit connaître la salle suivante.
 +  * Il existe plusieurs types de salles :
 +    * Celles par défaut où il faut résoudre toutes les énigmes pour sortir
 +    * Celles où il faut juste en résoudre une seule (à condition que l'énigme soit identifiée comme "unique")
 +    * Celles où l'une des énigmes ne doit pas être résolue...
 +    * La salle de sortie, correspondant à la fin du jeu
  
  
  • cnam/utc503/td2.1725534453.txt.gz
  • Dernière modification : il y a 13 mois
  • de jcheron