📝 Retour au QCM
1 / 25

📚 Guide de Révision

Programmation Orientée Objet Avancée - Java

Pr. Lahoucine BALLIHI

🎯 Bienvenue dans votre session de révision !

Ce guide vous aidera à réviser les concepts clés de votre cours POOA Java.

Concepts couverts :

  • Collections (Set, List, Map)
  • Multithreading
  • Exceptions

Utilisez les flèches ← → pour naviguer

2 / 25

📦 Les Collections

Qu'est-ce qu'une collection ?

Une collection est un groupe d'objets où la duplication peut être autorisée.

Utilisé pour :

  • Stocker, retrouver et manipuler des données
  • Transmettre des données d'une méthode à une autre
Exemples : une main de poker (collection de cartes), un dossier d'emails (collection de messages), un répertoire téléphonique (collection de correspondances NOM – N°)
3 / 25

📦 Set, List et Map

Quelle est la différence ?

  • Set : Ensemble ne contenant que des valeurs, pas de duplication. Exemple : {1,2,4,8}
  • List : Autorise la duplication, avec un système d'indexation pour l'accès rapide
  • Map : Groupe de paires clé-valeur. N'hérite pas de Collection
Map ne fait pas partie de la hiérarchie Collection car elle traite des données composées (clé, valeur) alors que Collection traite des données simples.
4 / 25

📦 HashSet vs TreeSet

Quand utiliser HashSet vs TreeSet ?

HashSet : Table de hachage, pas d'ordre garanti, accès rapide

TreeSet : Set trié (SortedSet), ordre croissant garanti, plus lent mais ordonné

Set set = new HashSet(); // Pas d'ordre set.add("Lahoucine"); set.add("Ali"); System.out.println(set); // [Zahra, Lahoucine, Ismail, Brahim, Ali] - ordre non garanti Set setTrie = new TreeSet(set); // Trier un HashSet existant System.out.println(setTrie); // [Ali, Brahim, Ismail, Lahoucine, Zahra] - trié
5 / 25

📦 ArrayList vs LinkedList

Quelle est la différence ?

ArrayList : Accès rapide par index, meilleur pour la lecture

LinkedList : Insertion/suppression rapides, peut servir de queue (FIFO)

List list = new ArrayList(); // Accès par index list.add("Lahoucine"); list.add("Ali"); System.out.println(list.get(2)); // Accès rapide par index // 2: Zahra LinkedList queue = new LinkedList(); // Queue FIFO queue.addFirst("Lahoucine"); // Ajouter au début queue.addFirst("Ali"); queue.removeLast(); // Retirer le dernier (FIFO) System.out.println(queue);
6 / 25

📦 HashMap vs TreeMap

Quand utiliser quoi ?

HashMap : Table de hachage, pas d'ordre, accès très rapide

TreeMap : Arbre binaire équilibré, trié par ordre croissant des clés

Map<String, String> domains = new HashMap<>(); domains.put("ma", "Morocco"); domains.put("de", "Germany"); domains.put("us", "United States"); // Pas d'ordre garanti TreeMap<String, String> sorted = new TreeMap<>(); sorted.put("ma", "Morocco"); sorted.put("de", "Germany"); System.out.println(sorted); // (de=Germany, ma=Morocco, us=United States) - trié
7 / 25

📦 Opérations sur les List

🔑 Opérations importantes

  • indexOf(Object o) : Obtenir la position d'un objet
  • lastIndexOf(Object o) : Dernière position d'un objet
  • get(int i) : Récupérer l'objet à la position i
  • set(int i, Object o) : Placer un objet à la position i
  • add(Object o) : Ajouter un objet
  • remove(int i) : Supprimer l'objet à la position i
  • removeRange(int fromIndex, int toIndex) : Supprimer une plage
8 / 25

📦 Opérations sur les Map

🔑 Opérations importantes

  • put(key, value) : Ajouter/modifier une paire clé-valeur
  • get(key) : Récupérer la valeur associée à une clé
  • keySet() : Obtenir l'ensemble des clés
  • values() : Obtenir toutes les valeurs
Map<String, String> domains = new HashMap<>(); domains.put("ma", "Morocco"); domains.put("ru", "Russia"); System.out.println(domains.get("ru")); // Russia for (String item : domains.values()) { System.out.println(item); // Parcourir les valeurs } Set keys = domains.keySet(); System.out.println(keys); // [de, ru, ma, hu, us]
9 / 25

⚡ Le Multithreading

Qu'est-ce qu'un Thread ?

Un thread ("file") a accès au CPU, gère un processus, et partage la mémoire avec d'autres threads.

Comparaison :

  • Ordinateur : CPU + Programme + Mémoire → Multitasking géré par l'OS
  • Thread : Accès CPU + Processus + Mémoire partagée → Multithreading géré par la JVM
Un thread partage la mémoire avec d'autres threads, contrairement à un processus qui a sa propre mémoire.
10 / 25

⚡ Pourquoi le Multithreading ?

Avantages

  • Permet de réaliser plusieurs processus indépendants en parallèle
  • Gère les files d'attente
  • Permet de synchroniser les processus entre eux
  • Essentiel pour les interfaces graphiques modernes
Sans multithreading, les composantes ne pourraient agir que lorsque l'interface est suspendue.
11 / 25

⚡ Création d'un Thread

Comment créer un Thread ?

Par implémentation de l'interface Runnable (recommandé)

  • Meilleur sur le plan orienté objet
  • La classe peut hériter d'une autre classe
  • Consistance
public class MaFile implements Runnable { public void run() { int i = 0; while (true) { if (i % 10 == 0) System.out.println(i + " est divisible par 10"); if (i > 101) break; i++; } } } public class LanceFile { public static void main(String[] arg) { Thread t = new Thread(new MaFile()); t.start(); // Démarrer le thread } }
12 / 25

⚡ Méthodes de Thread

🔑 Méthodes importantes

  • start() : Place le thread dans l'état "runnable" (éligible par le CPU)
  • yield() : Demande au scheduler de laisser la main aux autres threads
  • sleep(int millis) : Bloque le thread pour un temps spécifié (état d'attente)
Ne jamais appeler run() directement ! Utiliser start() pour démarrer le thread dans un nouveau contexte d'exécution.
13 / 25

⚡ États d'un Thread

🔑 Les différents états

  • Runnable : Éligible pour être exécuté par le CPU
  • Running : Actuellement exécuté
  • Waiting : En attente (sleep, wait, etc.)
Le scheduler de la JVM gère la transition entre ces états automatiquement.
14 / 25

⚠️ Les Exceptions

Qu'est-ce qu'une exception en Java ?

Une exception est un objet à part entière, instance de la classe Exception ou d'une de ses sous-classes.

Elle représente une erreur ou une situation exceptionnelle qui peut survenir pendant l'exécution du programme.

Les exceptions permettent de gérer les erreurs de manière élégante et de maintenir le flux d'exécution du programme.
15 / 25

⚠️ Exception Vérifiée vs Non-vérifiée

La différence

Exception vérifiée : Doit être déclarée avec throws ou gérée avec try-catch

RuntimeException : Exception non-vérifiée, peut être lancée sans déclaration

// ❌ Incorrect - Exception vérifiée public void action(int p) { if (p == 0) throw new Exception("Erreur"); // Erreur de compilation } // ✅ Correct - RuntimeException non-vérifiée public void action(int p) { if (p == 0) throw new RuntimeException("Erreur"); // OK }
16 / 25

⚠️ Gérer les Exceptions

Comment gérer les exceptions ?

  • try-catch : Capturer et gérer l'exception
  • throws : Déclarer que la méthode peut lancer une exception
  • finally : Code toujours exécuté, même en cas d'exception
try { // Code qui peut lancer une exception int result = 10 / 0; } catch (ArithmeticException e) { // Gérer l'exception System.out.println("Division par zéro !"); } finally { // Code toujours exécuté System.out.println("Fin du bloc"); }
17 / 25

⚠️ Hiérarchie des Exceptions

🔑 Structure

  • Throwable : Classe racine
  • Exception : Exceptions vérifiées
  • RuntimeException : Exceptions non-vérifiées
  • Error : Erreurs système (non récupérables)
RuntimeException hérite de Exception, mais les RuntimeException sont non-vérifiées (unchecked).
18 / 25

⚠️ Ordre d'exécution avec finally

🔑 Ordre d'exécution

  1. Code dans try
  2. Si exception : catch correspondant
  3. finally (toujours exécuté)
  4. Propagation de l'exception si non capturée
Le bloc finally s'exécute toujours, même si une exception est lancée ou si un return est présent dans le try ou catch.
19 / 25

✅ Checklist - Collections

Vérifiez votre compréhension

  • Je comprends la différence entre Set, List et Map
  • Je sais quand utiliser HashSet vs TreeSet
  • Je connais les différences entre ArrayList et LinkedList
  • Je sais utiliser HashMap et TreeMap
  • Je peux expliquer les opérations principales (add, get, remove, etc.)
20 / 25

✅ Checklist - Multithreading

Vérifiez votre compréhension

  • Je comprends ce qu'est un thread
  • Je sais pourquoi utiliser le multithreading
  • Je peux créer un thread en implémentant Runnable
  • Je connais les méthodes start(), yield(), sleep()
  • Je comprends les états d'un thread (runnable, running, waiting)
21 / 25

✅ Checklist - Exceptions

Vérifiez votre compréhension

  • Je comprends ce qu'est une exception
  • Je connais la différence entre exception vérifiée et non-vérifiée
  • Je sais utiliser try-catch-finally
  • Je comprends le mot-clé throws
  • Je connais la hiérarchie des exceptions
22 / 25

📖 Référence Rapide

Set

Pas de duplication
HashSet (rapide)
TreeSet (trié)

List

Duplication autorisée
ArrayList (index)
LinkedList (queue)

Map

Clé-Valeur
HashMap (rapide)
TreeMap (trié)

Thread

Runnable interface
start() pour démarrer
sleep() pour attendre

Exception

Exception (vérifiée)
RuntimeException (non-vérifiée)
try-catch-finally

23 / 25

💪 Stratégie de Révision

🎯 Conseils

  1. Lisez chaque section et discutez avec vos amis
  2. Essayez de répondre aux questions avant de regarder les réponses
  3. Écrivez du code pour tester les concepts
  4. Expliquez les concepts à voix haute à vos amis
  5. Utilisez la checklist pour vérifier votre compréhension
24 / 25

🤝 Activités de Groupe

Idées pour votre session

  • Créez des exemples de code ensemble
  • Expliquez mutuellement les différences entre les concepts
  • Posez-vous des questions mutuellement
  • Résolvez des exercices pratiques
  • Discutez des cas d'usage réels
25 / 25

🚀 Bonne Révision !

Vous êtes prêts !

Vous avez maintenant révisé tous les concepts clés :

  • Collections (Set, List, Map)
  • Multithreading
  • Exceptions

Bonne chance pour votre examen ! 💪

Cours POOA Java - Pr. Lahoucine BALLIHI