Fiche de révision : POO Java : polymorphisme et collections

Plan du Cours

  1. Polymorphisme et construction des objets
  2. Classes abstraites et héritage
  3. Interfaces et contrats de classes
  4. Pièges de la généralisation
  5. Architecture de l’API Collections
  6. Collection et listes
  7. Maps et leurs implémentations
  8. Listes, tri et comparateurs

1. Polymorphisme et construction des objets

Notions clés & Définitions

  • Polymorphisme : Consiste à découpler le quoi du comment en définissant une interface dans une super-classe et plusieurs implémentations différentes dans ses sous-classes.

★ À maîtriser

  • L’upcasting permet de traiter sans distinction les sous-classes d’une même super-classe et fait oublier intentionnellement au programme le type précis d’un objet.

Compléments

  • Lors de la construction d’un objet, le constructeur de la super-classe est appelé récursivement jusqu’à la racine, puis les constructeurs des membres suivent leur ordre de déclaration avant l’exécution du corps du constructeur de la classe.

Astuce mémo

Le quoi est séparé du comment : super-classe commune, implémentations spécialisées.

2. Classes abstraites et héritage

Notions clés & Définitions

  • Classe abstraite : Classe qui ne peut pas être instanciée mais qui peut contenir des constructeurs et servir à factoriser des propriétés communes.

★ À maîtriser

📌 Une classe contenant au moins une méthode abstraite doit être déclarée abstract, et toute sous-classe doit implémenter les méthodes abstraites ou être elle-même déclarée abstract.

Compléments

  • La déclaration d’une méthode abstraite suit la forme public abstract type nomméthode(…) ; et ne contient aucun corps de méthode.

Astuce mémo

Classe incomplète → impossible à instancier ; sous-classe concrète → implémentation obligatoire.

3. Interfaces et contrats de classes

Notions clés & Définitions

  • Interface : Définit un contrat de services au moyen de signatures de méthodes, sans implémentation, attributs ni constructeurs.

★ À maîtriser

📌 Le mot-clé implements rend une classe conforme à une ou plusieurs interfaces et l’oblige à implémenter toutes leurs méthodes publiques.

  • Les interfaces permettent une forme d’héritage multiple et diminuent le couplage entre les classes en limitant leur collaboration aux services nécessaires.

Compléments

  • Les méthodes d’une interface sont implicitement abstract et public, tandis que ses données sont implicitement static et final.

Astuce mémo

Une interface agit comme un contrat signé par les classes qui l’implémentent.

4. Pièges de la généralisation

★ À maîtriser

📌 Une généralisation est incorrecte lorsque des sous-classes de même niveau reposent sur des critères de classification hétérogènes, comme Salarié et Libéral classés par profession alors que Sportif relève d’une autre classification.

Compléments

📌 Une confusion de niveau d’abstraction apparaît lorsqu’une relation relie des concepts situés à des niveaux conceptuels différents, comme Modèle de voiture, Voiture et Propriétaire.

Astuce mémo

Même niveau d’abstraction : les sous-classes doivent partager un critère de classification cohérent.

5. Architecture de l’API Collections

Notions clés & Définitions

  • API Collections : Fournit des interfaces décrivant les conteneurs, des implémentations optimisées selon différents usages et des classes ou interfaces utilitaires pour gérer les collections.

Points essentiels

  • Les principaux utilitaires sont:
    • Comparator
    • Iterator
    • Collections
    • Arrays

Astuce mémo

L’API forme une boîte à outils : interfaces, implémentations et utilitaires.

6. Collection et listes

Notions clés & Définitions

  • Collection : L’interface Collection abstrait le comportement d’un conteneur d’objets et fournit notamment les opérations add, remove, contains, isEmpty, size et iterator.
  • List : Une List est une collection ordonnée qui accepte les doublons et possède notamment les opérations get par index, indexOf et remove par index.

★ À maîtriser

📌 Les méthodes de Collection qui comparent des objets, comme contains(), testent l’égalité définie par equals() et non l’égalité des références.

Compléments

  • Les principales implémentations de List sont ArrayList et LinkedList.

Astuce mémo

Collection décrit le conteneur ; List ajoute ordre, indexation et doublons.

7. Maps et leurs implémentations

Notions clés & Définitions

  • Map : Associe des clés uniques à des valeurs et ne constitue pas une sous-interface de Collection.

★ À maîtriser

📌 Les objets utilisés comme clés d’une Map doivent redéfinir Object.hashCode(), et les comparaisons utilisent equals().

  • HashMap implémente Map avec une table de hachage non ordonnée et non synchronisée.

Compléments

  • TreeMap implémente Map avec un arbre binaire équilibré ordonné et non synchronisé.

  • Hashtable est une implémentation synchronisée de Map issue de la classe Hashtable de Java 1.1.

Astuce mémo

HashMap est non ordonnée, TreeMap ordonnée et Hashtable synchronisée.

8. Listes, tri et comparateurs

★ À maîtriser

  • ArrayList implémente List avec un tableau, peut être rapide, mais est ralentie par les insertions au milieu ou les changements fréquents de dimension et n’est pas synchronisée.

  • Pour trier une List, on utilise Collections.sort(List) ou Collections.sort(List l, Comparator c), tandis qu’un Map trié utilise SortedMap et TreeMap et qu’un Set trié utilise SortedSet et TreeSet.

📌 Comparable impose un ordre naturel avec compareTo(Object o), tandis que Comparator compare deux objets avec compare(Object o1, Object o2), y compris des objets de classes différentes.

Compléments

  • LinkedList implémente List avec une liste dynamique doublement chaînée, est utile pour les files d’attente et n’est pas synchronisée.

📌 Les méthodes compareTo et compare doivent retourner un entier négatif, zéro ou positif lorsque le premier objet est respectivement inférieur, égal ou supérieur au second.

Astuce mémo

Choisir la structure → définir la comparaison → appliquer le tri.

Tableaux de synthèse

Comparaison des implémentations de Map

ImplémentationStructureOrdreSynchronisation
HashMapTable de hachageNon ordonnéeNon synchronisée
TreeMapArbre binaire équilibréOrdonnéeNon synchronisée
HashtableImplémentation historiqueNon préciséSynchronisée

Comparaison des implémentations de List

ImplémentationStructureCaractéristique
ArrayListTableauRapide, mais ralentie par les insertions au milieu
LinkedListListe dynamique doublement chaînéeAdaptée notamment aux files d’attente

Teste tes connaissances

Teste tes connaissances sur POO Java : polymorphisme et collections avec 20 questions à choix multiples et corrections détaillées.

1. Quel principe permet de séparer l’interface commune d’un objet de la manière concrète dont chaque sous-classe réalise cette interface ?

2. Lorsqu’une référence de super-classe désigne un objet d’une sous-classe, quelle opération permet de traiter cet objet sans tenir compte de son type précis ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de POO Java : polymorphisme et collections avec 44 flashcards interactives.

Qu'est-ce que le polymorphisme en programmation orientée objet ?

Le polymorphisme découple le quoi du comment via une interface en super-classe et plusieurs implémentations en sous-classes.

Quel est l'effet de l'upcasting sur le type précis d'un objet ?

L'upcasting fait oublier intentionnellement le type précis d'un objet.

Que permet de faire l'upcasting avec les sous-classes d'une super-classe ?

L'upcasting permet de traiter sans distinction les sous-classes d'une même super-classe.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches