Travaux pratiques de java avancé
1. Les bases de Java
Écris une application Java nommée AssistantJava qui affiche un menu interactif permettant à
l’utilisateur de choisir parmi les actions suivantes :
Bienvenue dans l'Assistant Java ! Que souhaitez-vous faire ?
1. Dire bonjour
2. Calculatrice (addition, soustraction, multiplication, division)
3. Vérifier si un nombre est pair ou impair
4. Afficher la table de multiplication d’un nombre
5. Quitter
2. Les structures de données
Écris une application Java nommée AnalyseurDeDonnées qui propose les fonctionnalités suivantes :
a. Trier un tableau d’entiers
• Crée un tableau int[] notes
• Trie ce tableau en ordre croissant et affiche les éléments triés.
b. Supprimer les doublons d’une liste
• Convertis le tableau ci-dessus en une List<Integer>.
• Supprime les doublons et affiche la nouvelle liste sans doublons.
c. Compter les mots d’un texte avec une HashMap
• Demande à l’utilisateur de saisir une phrase (ex: "le chat aime le lait").
• Utilise une HashMap<String, Integer> pour compter combien de fois chaque mot apparaît.
• Affiche les résultats ainsi :
le → 2
chat → 1
aime → 1
lait → 1
d. Rechercher un élément dans un Set
• Convertis la liste sans doublons précédente en Set<Integer>.
• Demande à l’utilisateur un nombre à rechercher.
• Affiche s’il est présent ou non dans le set.
e. Trouver le maximum et le minimum dans une collection
Utilise [Link]() et [Link]() pour afficher la plus grande et la plus petite note de la
liste de départ.
3. Programmation orientée objet (POO)
Crée un programme Java qui modélise un zoo avec plusieurs types d’animaux. Le programme doit
permettre d'ajouter des animaux, d’afficher leurs caractéristiques et de faire interagir chaque animal
via une méthode faireDuBruit() polymorphe.
a. Classe de base : Animal (abstraite) , attributs privés, constructeur, getters
b. Créer 3 classes filles
Lion, Elephant, Serpent qui étendent Animal
Chaque classe redéfinit la méthode faireDuBruit() (rugir, barrir, siffler)
c. Ajoute un champ niveauFaim (0 à 10) dans la classe Animal
d. Crée une méthode manger() spécifique à chaque animal, qui réduit la faim de manière
différente.
e. Créer une interface Soignable avec une méthode soigner().
f. Implémenter cette interface dans Animal ou ses sous-classes.
g. Utiliser une classe Veterinaire qui soigne tous les animaux
h. Ecrire la méthode main() contenant un tableau d'objets polymorphes, et afficher l’ensemble
du tableau avec chacun son bruit
4. Exceptions et fichiers
Crée une application Java appelée JournalDeNotes qui permet à un étudiant de :
1. Ajouter une note (valeur entre 0 et 20) dans un fichier [Link]
2. Lire toutes les notes enregistrées
3. Calculer la moyenne des notes
4. Quitter le programme
a. Ajouter une note dans un fichier texte
• Demander à l’utilisateur de saisir une note
• Vérifier que la note est bien un nombre entre 0 et 20
• Enregistrer cette note dans le fichier [Link] (une note par ligne)
• Utiliser FileWriter en mode append
b. Lire les notes depuis le fichier
• Lire ligne par ligne depuis [Link] avec BufferedReader
• Afficher les notes avec leur numéro d’ordre (Note 1 : 14.5, etc.)
c. Calculer la moyenne
• Convertir chaque ligne en double
• Gérer les erreurs de format (ex : ligne vide ou texte non numérique)
• Calculer et afficher la moyenne
• Gérer le cas où aucune note n’est disponible (division par zéro)
d. Menu interactif
Proposer un menu interactif permettant de choisir l’option que l’utilisateur désire
5. Collections avancées et Generics, Multithreading et Concurrence, Java
avancé
Réaliser une application console en Java qui modélise un système de gestion d’un centre de formation.
Ce projet permet de pratiquer les collections avancées, les types génériques, le multithreading, les
expressions lambda, les Streams et les design patterns (Factory, Singleton).
Partie 1 : Collections & Génériques
Étape 1 : Créer une méthode générique maxElement
public static <T extends Comparable<T>> T maxElement(List<T> liste) { ... }
• Créez une méthode qui retourne le maximum d’une liste d’éléments comparables.
• Testez-la avec une liste de notes d’étudiants (Double).
Étape 2 : Implémenter une PriorityQueue
• Créez une classe Cours avec un nom et une priorité.
• Faites implémenter Comparable<Cours> pour trier les cours selon leur priorité (plus petite =
plus prioritaire).
• Utilisez une PriorityQueue pour gérer les cours.
Étape 3 : Créer une classe générique Boite<T>
• Créez une classe contenant un attribut T contenu, un constructeur, un getter et une méthode
afficherContenu().
• Testez-la avec un String, un Integer, et une classe Etudiant.
Partie 2 : Multithreading & Concurrence
Étape 4 : Créer deux threads parallèles
• Un thread affiche "Chargement des cours..."
• Un autre affiche "Chargement des étudiants..."
• Utilisez Thread et Runnable.
Étape 5 : Simuler un téléchargement avec Runnable
• Créez un Runnable nommé telechargement.
• Il affiche un message, dort 2 secondes, puis affiche "Téléchargement terminé".
Étape 6 : Accès concurrent à une ressource (bonus)
• Simulez plusieurs threads qui accèdent à une liste partagée.
• Protégez l’accès avec le mot-clé synchronized.
Étape 7 : Utiliser un ExecutorService
• Créez un ExecutorService avec [Link](3).
• Lancez plusieurs tâches simulant l’envoi de mails aux étudiants.
Partie 3 : Java moderne, Streams, Lambdas, Design Patterns
Étape 8 : Streams & filtres
• Créez une liste d’Etudiant avec nom et moyenne.
• Utilisez [Link]() pour extraire ceux avec une moyenne >= 14.
• Triez-les par nom avec sorted() et une lambda.
Étape 9 : Pattern Factory
• Créez une classe UtilisateurFactory avec une méthode creerUtilisateur(String type, ...)
• Elle retourne soit un Etudiant, soit un Formateur.
Étape 10 : Pattern Singleton
• Créez une classe ServiceUtilisateur qui affiche un message de bienvenue.
• Rendez-la Singleton (instance unique, constructeur privé).
• Utilisez getInstance() dans le main().
Partie 4 : Intégration finale
Étape 11 : Créez un fichier [Link]
• Utilisez toutes les classes précédentes dans une méthode main().
• Intégrez les Threads, l’exécution de tâches, les collections, les filtres avec Streams et
l’utilisation des patterns.
Étape 12 : (Facultatif) Ajouter un menu interactif
• Proposez des options à l’utilisateur : Ajouter un étudiant, afficher les cours, lancer les
traitements…