QCM : POO Java : polymorphisme et collections — 20 questions

Questions et réponses du QCM

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 ?

Le traitement spécialisé des types
Le polymorphisme
La surcharge des constructeurs
La conversion descendante

Le polymorphisme

Explication

Le polymorphisme découple le service attendu de son implémentation concrète dans les sous-classes. Le traitement spécialisé de chaque type ne sépare pas une interface commune des différentes réalisations.

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 ?

La surcharge
Le downcasting
L’upcasting
La factorisation

L’upcasting

Explication

L’upcasting masque intentionnellement le type précis de l’objet afin de permettre un traitement uniforme via la super-classe. Le downcasting poursuit l’objectif inverse en recherchant un type plus spécifique.

3. Quelle caractéristique décrit correctement une classe abstraite ?

Elle contient uniquement des méthodes abstraites sans propriétés communes.
Elle peut être instanciée, mais elle ne peut pas contenir de constructeur.
Elle ne peut pas être instanciée, mais elle peut contenir un constructeur.
Elle définit un contrat sans attributs ni constructeurs.

Elle ne peut pas être instanciée, mais elle peut contenir un constructeur.

Explication

Une classe abstraite ne peut pas être instanciée, tout en pouvant définir des constructeurs et factoriser des propriétés communes. La description d’un contrat sans attributs ni constructeurs correspond plutôt à une interface.

4. Une sous-classe hérite d’une méthode abstraite sans fournir son implémentation : quelle règle doit-elle respecter ?

Elle doit être déclarée finale.
Elle doit remplacer la classe par une interface.
Elle doit être déclarée abstraite.
Elle doit rendre la méthode privée.

Elle doit être déclarée abstraite.

Explication

Une sous-classe qui n’implémente pas toutes les méthodes abstraites héritées doit elle-même être déclarée abstract. La rendre finale ou privée ne fournit pas l’implémentation requise.

5. Quel rôle joue une interface dans la conception d’une classe ?

Elle stocke des attributs d’instance et leur implémentation.
Elle impose une hiérarchie entre plusieurs classes concrètes.
Elle définit un contrat de services au moyen de signatures de méthodes.
Elle fournit une classe instanciable avec ses constructeurs.

Elle définit un contrat de services au moyen de signatures de méthodes.

Explication

Une interface décrit les services attendus à l’aide de signatures de méthodes, sans fournir d’implémentation, d’attributs ou de constructeurs. Une classe instanciable avec des constructeurs relève d’une classe concrète, non d’une interface.

6. Quelle conséquence le mot-clé implements a-t-il lorsqu’il est utilisé dans la déclaration d’une classe ?

La classe récupère les constructeurs définis dans les interfaces annoncées.
La classe doit implémenter les méthodes publiques des interfaces annoncées.
La classe devient automatiquement une classe abstraite sans méthode concrète.
La classe hérite de l’implémentation d’une super-classe annoncée.

La classe doit implémenter les méthodes publiques des interfaces annoncées.

Explication

Le mot-clé implements établit la conformité d’une classe à une ou plusieurs interfaces et l’oblige à réaliser leurs méthodes publiques. L’héritage d’une classe s’exprime avec extends, tandis qu’une interface ne fournit pas de constructeurs.

7. Pourquoi les interfaces peuvent-elles réduire le couplage entre des classes ?

Elles rendent les méthodes privées afin d’isoler les détails entre les objets.
Elles imposent une seule implémentation partagée pour chaque service déclaré.
Elles limitent les collaborations aux services nécessaires et autorisent une forme d’héritage multiple.
Elles remplacent les classes concrètes par une hiérarchie unique et centralisée.

Elles limitent les collaborations aux services nécessaires et autorisent une forme d’héritage multiple.

Explication

Les interfaces réduisent le couplage en faisant communiquer les classes par les services nécessaires, tout en permettant à une classe de se conformer à plusieurs interfaces. Elles n’imposent ni une hiérarchie unique ni une implémentation partagée.

8. Dans quel cas une généralisation entre plusieurs sous-classes est-elle incorrecte ?

Lorsque les sous-classes représentent des instances créées à des moments différents
Lorsque les sous-classes reposent sur des critères de classification hétérogènes
Lorsque les sous-classes possèdent des attributs hérités différents
Lorsque les sous-classes sont associées à des opérations de gestion distinctes

Lorsque les sous-classes reposent sur des critères de classification hétérogènes

Explication

La généralisation devient incorrecte lorsque des sous-classes de même niveau sont définies selon des critères de classification différents. Par exemple, Salarié et Libéral relèvent de la profession, tandis que Sportif relève d’une autre classification.

9. Quelle situation illustre une confusion de niveau d’abstraction dans un modèle conceptuel ?

Regrouper plusieurs Voitures dans une classe représentant un parc automobile
Associer une Voiture à son Modèle de voiture par une relation de classification
Relier Modèle de voiture, Voiture et Propriétaire comme s’ils représentaient le même niveau conceptuel
Relier une Voiture à plusieurs Propriétaires par une association de possession

Relier Modèle de voiture, Voiture et Propriétaire comme s’ils représentaient le même niveau conceptuel

Explication

La confusion apparaît lorsqu’une relation mélange le modèle d’un objet, l’objet lui-même et son propriétaire comme s’ils étaient au même niveau. Une association entre une voiture et son modèle, en revanche, peut exprimer correctement une relation de classification.

10. Quels sont les trois types d’éléments réunis par l’API Collections ?

Des interfaces de conteneurs, des implémentations optimisées et des utilitaires de gestion
Des types primitifs, des exceptions spécialisées et des modules de persistance
Des classes métier, des fichiers de configuration et des mécanismes de sérialisation
Des interfaces graphiques, des implémentations concurrentes et des générateurs de code

Des interfaces de conteneurs, des implémentations optimisées et des utilitaires de gestion

Explication

L’API Collections combine des interfaces décrivant les conteneurs, des implémentations adaptées à différents usages et des classes ou interfaces utilitaires. Les autres réponses attribuent à cette API des éléments qui ne constituent pas son architecture générale.

11. Quelle distinction est correcte entre les principaux utilitaires de l’API Collections ?

Collections et Iterator sont des interfaces, tandis qu'Arrays et Comparator sont des classes
Comparator et Collections sont des interfaces, tandis qu'Iterator et Arrays sont des classes
Iterator et Arrays sont des interfaces, tandis que Comparator et Collections sont des classes
Comparator et Iterator sont des interfaces, tandis que Collections et Arrays sont des classes

Comparator et Iterator sont des interfaces, tandis que Collections et Arrays sont des classes

Explication

Comparator et Iterator sont des interfaces utilitaires, alors que Collections et Arrays sont des classes utilitaires. La confusion vient souvent de l’utilisation commune de ces quatre éléments pour manipuler ou parcourir des collections.

12. Quelle proposition décrit correctement l’interface Collection ?

Elle abstrait un conteneur général et propose notamment add, remove, contains, size et iterator
Elle représente une implémentation basée sur un tableau et contrôle directement sa capacité
Elle garantit l’unicité des éléments et fournit une recherche fondée sur la position
Elle impose un ordre aux éléments et fournit principalement get, indexOf et remove par index

Elle abstrait un conteneur général et propose notamment add, remove, contains, size et iterator

Explication

Collection décrit le comportement général d’un conteneur d’objets et fournit des opérations comme l’ajout, la suppression, le test de présence, le comptage et l’itération. L’ordre et l’accès par index caractérisent plus spécifiquement List.

13. Lorsqu’une collection utilise contains() pour comparer des objets, quelle règle s’applique ?

La comparaison utilise l’égalité définie par equals()
La comparaison examine uniquement les valeurs des attributs primitifs
La comparaison vérifie que les références désignent le même objet
La comparaison repose sur l’ordre naturel fourni par compareTo()

La comparaison utilise l’égalité définie par equals()

Explication

Les méthodes de Collection qui comparent des objets, notamment contains(), s’appuient sur equals() pour déterminer leur égalité. La simple identité des références correspond à une autre notion et ne suffit pas à décrire le comportement attendu.

14. Quelle propriété distingue une List d’une collection générale ?

Elle organise les éléments selon leur priorité et fournit une extraction par ordre d’arrivée
Elle conserve l’ordre des éléments, accepte les doublons et permet l’accès par index
Elle impose des éléments uniques, les trie automatiquement et interdit l’accès positionnel
Elle associe chaque élément à une clé et remplace les doublons par leur dernière valeur

Elle conserve l’ordre des éléments, accepte les doublons et permet l’accès par index

Explication

Une List est une collection ordonnée qui peut contenir plusieurs occurrences d’un même élément et permet notamment get, indexOf et remove par index. L’imposition de l’unicité et le tri automatique ne définissent pas cette interface.

15. Quelle distinction décrit correctement une Map par rapport à une Collection ?

Une Map associe des clés uniques à des valeurs, tandis qu’une Collection regroupe des valeurs.
Une Map synchronise ses accès, tandis qu’une Collection ne peut pas contenir de doublons.
Une Map impose un ordre aux valeurs, tandis qu’une Collection impose un ordre aux clés.
Une Map regroupe des valeurs, tandis qu’une Collection associe des clés uniques à des valeurs.

Une Map associe des clés uniques à des valeurs, tandis qu’une Collection regroupe des valeurs.

Explication

Une Map repose sur des associations entre clés uniques et valeurs, alors qu’une Collection représente un ensemble de valeurs contenues. La confusion vient de l’inversion de ces deux rôles, et non d’une différence de synchronisation ou d’ordre.

16. Quelles conditions doivent respecter les objets utilisés comme clés dans une Map ?

Ils doivent appartenir à une Collection, et leur égalité est vérifiée avec getClass().
Ils doivent redéfinir compareTo(), et leur égalité est vérifiée avec compare().
Ils doivent redéfinir hashCode(), et leur égalité est vérifiée avec equals().
Ils doivent être synchronisés, et leur égalité est vérifiée avec toString().

Ils doivent redéfinir hashCode(), et leur égalité est vérifiée avec equals().

Explication

Les clés doivent fournir une redéfinition cohérente de hashCode(), tandis que les comparaisons d’égalité utilisent equals(). Les méthodes compareTo() et compare() concernent l’ordonnancement, pas la règle générale d’identification des clés d’une Map.

17. Dans quelle situation HashMap constitue-t-elle l’implémentation appropriée d’une Map ?

Lorsqu’un accès synchronisé est requis entre plusieurs threads concurrents.
Lorsqu’une liste doublement chaînée doit gérer des insertions successives.
Lorsqu’une table de hachage non ordonnée et non synchronisée convient au besoin.
Lorsqu’un arbre équilibré doit maintenir les entrées dans un ordre déterminé.

Lorsqu’une table de hachage non ordonnée et non synchronisée convient au besoin.

Explication

HashMap fournit une table de hachage dont les éléments ne sont pas ordonnés et qui n’est pas synchronisée. Un arbre équilibré correspond plutôt à TreeMap, tandis que la synchronisation et les listes chaînées relèvent d’autres choix d’implémentation.

18. Pourquoi une ArrayList peut-elle devenir moins efficace lors d’insertions fréquentes au milieu ?

Ces insertions nécessitent une synchronisation automatique de toutes les opérations effectuées.
Ces insertions convertissent progressivement la liste en structure doublement chaînée.
Ces insertions imposent un parcours d’un arbre équilibré pour retrouver chaque élément concerné.
Ces insertions peuvent déplacer des éléments et entraîner des changements de dimension du tableau.

Ces insertions peuvent déplacer des éléments et entraîner des changements de dimension du tableau.

Explication

ArrayList s’appuie sur un tableau : insérer au milieu peut donc déplacer des éléments et provoquer une adaptation de sa capacité. Elle n’effectue pas automatiquement une conversion en liste chaînée, et son implémentation n’est pas synchronisée.

19. Quelle méthode permet de trier directement une List en Java ?

Utiliser hashCode() et equals(), qui déterminent l’ordre entre les éléments.
Utiliser SortedMap et TreeMap, qui organisent les éléments de la liste.
Utiliser Collections.sort(List), ou sa variante recevant un Comparator.
Utiliser SortedSet et TreeSet, qui appliquent leur ordre à chaque liste.

Utiliser Collections.sort(List), ou sa variante recevant un Comparator.

Explication

Le tri d’une List s’effectue avec Collections.sort(List) ou avec la surcharge qui reçoit un Comparator. SortedMap et TreeMap concernent les Map, tandis que SortedSet et TreeSet concernent les Set.

20. Quelle différence distingue Comparable de Comparator lors de la définition d’un ordre ?

Comparable vérifie l’égalité avec equals(), tandis que Comparator calcule les valeurs avec hashCode().
Comparable trie les Map avec TreeMap, tandis que Comparator trie les Set avec TreeSet.
Comparable définit l’ordre naturel d’une classe avec compareTo(), tandis que Comparator compare depuis une classe séparée.
Comparable compare des classes différentes avec compare(), tandis que Comparator définit l’ordre interne avec compareTo().

Comparable définit l’ordre naturel d’une classe avec compareTo(), tandis que Comparator compare depuis une classe séparée.

Explication

Comparable est porté par la classe et définit son ordre naturel grâce à compareTo(), alors qu’un Comparator fournit une comparaison depuis une classe distincte avec compare(). Le choix entre les deux concerne la définition de l’ordre, et non le type de collection triée.

Révisez avec les flashcards

Mémorisez les réponses avec 44 flashcards sur POO Java : polymorphisme et collections.

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 →

Approfondir avec la fiche

Consultez la fiche de révision complète sur POO Java : polymorphisme et collections.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM