Programmation Orientée Objet avec Java – Coda 1 ère année – 2026 ## Exercice 1 – Distribution des cartes lors des longues soirées > Nos amis chasseurs du Bouchonnois ont besoin de ton aide ! > > Lors des longues soirées dans la cabane, il faut s'occuper pour passer le temps en bonne compagnie. > > Mais voilà, au fur et à mesure que la soirée avance, les chasseurs sont de plus en plus... distraits. > > Ils ont besoin d'une machine pour tirer les cartes à jouer et les trier à leur place ### 1 – Écrire une classe `Card` qui représente une carte d’un paquet de carte. Une carte à les propriétés suivantes : - Une couleur : `HEART`, `DIAMOND`, `CLUB`, `SPADE` - Une valeur comprise entre `2` et `14` Définir ses attributs et le constructeur --- ### 2 – Implémenter la méthode `toString` qui affiche une carte au format : `"3 de carreau"` Ou encore `"As de Pique"` --- ### 3 – Implémenter la méthode `compareTo` qui permet de comparer 2 cartes. La fonction doit renvoyer `-1`, `0` ou `1`. --- 4 – Implémenter une **méthode statique** qui permet de générer une carte aléatoirement ```java public static Card generateCard() ``` --- 5 – Écrire un code qui génère 10 cartes aléatoires et qui les range dans une **ArrayList** Utilisez la fonction **`sort()`** pour trier les cartes et **afficher** toutes les cartes de la liste ## Exercice 2 – Statistiques de chasse > La nuit est passée et la partie de chasse se déroule. > > Mais voilà, afin de savoir s'ils doivent faire un lâcher de galinettes cendrées en début d'après midi, > nos chasseurs doivent faire des statistiques de leurs performances. > > Ils sont encore... distraits de la soirée de la veille. > > Peux-tu les aider à calculer leurs statistiques. > 💡 Astuce : vous pouvez tester votre classe dans un programme Main 1 – Écrire une classe `PalmaresDeChasseur` avec les 2 propriétés suivantes : - `nom` : le nom du chasseur - `nombreDeGalinettesEues` : le nombre de galinettes que le chasseur a eues --- 2 – Écrire une classe `StatistiquesDeChasse` qui permet de gérer une liste de palmarès des chasseurs. La classe doit posséder un attribut `palmaresDeChasseurs` qui est une **ArrayList** de `PalmaresDeChasseur` --- 3 – Ajouter une méthode permettant d’ajouter un `PalmaresDeChasseur` ```java void addPalmares(PalmaresDeChasseur grade) ``` --- 4 – Ajouter une méthode permettant de retirer un `PalmaresDeChasseur` à partir d’un nom ```java void removePalmaresByName(String name) ``` --- 5 – Ajouter les méthodes suivantes : - calcul de la moyenne - calcul de la médiane - calcule de l’écart type > Formule de l'écart-type > > racine carrée de ( ∑ ( Xi – ų ) ² ) / N > > où : > > - ∑ est **la somme** de chaque élément > - Xi est chaque élément de la liste > - ų est **la moyenne** des éléments de la liste > - N est le nombre d'éléments --- ### Bonus - Tester, c'est douter... > ... et douter c'est utile. S'il vous reste un peu de temps, essayez d'écrire des tests automatisés pour vérifier le comportement. Les tests automatisés sont des programmes qui permettent de vérifier le résultat d'autres programmes ! Plus besoin de s'embêter à lancer des Main ou à lire le résultat de la console ou à débugger. On peut décrire nos vérification avec du code et les relancer hyper rapidement autant de fois qu'on veut ! 1 - Créer une classe `src/test/java/StatistiquesDeChasseTest.java` --- 2 - Coller le code ci-dessous comme point de départ. ```java import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; class StatistiquesDeChasseTest { @Test void test_assertj_is_installed() { assertThat("").isEqualTo(""); } } ``` Normalement, si tout est bien configuré, vous devriez pouvoir lancer les tests dans IntelliJ Bouton de lancement des tests. ![[run_tests.png]] Tests lancés avec succès. ![[test_success.png]] --- Exemple de test : ```java @Test void mean_of_one_grade_is_grade() { // Arrange StatistiquesDeChasse statistiquesDeChasse = new StatistiquesDeChasse(); // Act statistiquesDeChasse.addPalmares(new PalmaresDeChasseur("Dédé", 15)); // Assert assertThat(statistiquesDeChasse.mean()).isEqualTo(15);} ```