Examens corriges

TD 5 de Programmation Orientée Objet : Classes et Héritage

Introduction au document

Ce document correspond au corrigé du cinquième travail dirigé de Programmation Orientée Objet, destiné aux étudiants en Licence Informatique de l'Université Paris Diderot pour l'année universitaire 2009-2010. Il aborde de manière pratique et détaillée les concepts fondamentaux de la programmation orientée objet en Java, notamment la distinction entre valeurs et références, l'utilisation des constructeurs, la redéfinition de méthodes, ainsi que la liaison dynamique et le polymorphisme.

Présentation générale du contenu

Le document se compose de dix exercices progressifs, chacun étant accompagné de son code source et d'une correction explicative détaillée. Les exercices débutent par la manipulation de variables primitives et d'objets, se poursuivent avec la classification de hiérarchies de classes, l'analyse de constructeurs et de leurs règles d'appel, l'étude de la redéfinition de méthodes, et s'achèvent par des cas avancés de liaison dynamique et la conception de classes conteneurs d'entiers.

Thèmes abordés et concepts clés

Les exercices couvrent plusieurs notions incontournables de la programmation orientée objet :

  • Valeurs et références : Compréhension de la transmission de paramètres par valeur (types primitifs) versus par référence (objets).
  • Surcharge et polymorphisme : Analyse du comportement des méthodes surchargées et redéfinies lors de l'exécution, avec une attention particulière portée à la liaison dynamique.
  • Constructeurs : Règles d'appel explicite et implicite des constructeurs de superclasses, utilisation du mot-clé this et gestion de l'ordre d'initialisation.
  • Hiérarchie et héritage : Modélisation de relations entre classes (comme Personne, Étudiant, Travailleur) et règles de visibilité des champs et méthodes.
  • Implémentation de structures de données : Création et extension de classes personnalisées gérant des tableaux dynamiques d'entiers, avec des mécanismes de redimensionnement et d'ordonnancement.

Méthodologie et utilisation pour les révisions

Ce document constitue un support d'entraînement idéal pour s'exercer aux pièges classiques de la compilation et de l'exécution en Java. Chaque exercice met en scène un extrait de code souvent confronté à des erreurs de syntaxe, de visibilité ou de typage, suivis d'une correction rigoureuse. Les étudiants peuvent s'en servir pour s'entraîner à prédire le résultat ou les erreurs de compilation de programmes orientés objet avant de consulter les explications détaillées fournies pour chaque cas.

Informations relatives au document

Ce TD a été rédigé pour le module de Programmation Orientée Objet de l'année 2009-2010. Il s'adresse aux étudiants en Licence Informatique (Université Paris Diderot) et présente un niveau de difficulté intermédiaire à avancé, particulièrement adapté pour maîtriser le comportement dynamique du langage Java face à l'héritage complexe.

Questions fréquentes

À quel niveau d'études ce TD de programmation s'adresse-t-il ?

Ce document est conçu pour les étudiants inscrits en Licence Informatique, plus précisément dans le cadre d'un enseignement de Programmation Orientée Objet dispensé à l'Université Paris Diderot pendant l'année 2009-2010.

Quels sont les principaux pièges abordés dans les exercices sur la liaison dynamique ?

Les exercices 6 à 8 étudient la différence entre le type déclaré d'un objet (utilisé à la compilation pour déterminer la signature de la méthode) et son type réel (utilisé lors de l'exécution pour choisir le code de la méthode à exécuter).

Comment les constructeurs sont-ils traités dans la partie sur l'héritage ?

L'exercice 4 analyse plusieurs cas d'erreurs fréquentes liés à l'absence ou à la mauvaise syntaxe des appels aux constructeurs de la superclasse via super() ou aux constructeurs de la même classe via this().

Testez vos connaissances

Question 1

Que se passe-t-il lors de la redéfinition d'une méthode si l'on tente de restreindre sa visibilité dans une sous-classe (par exemple de public à private) ?

  1. Le programme s'exécute normalement sans modification.
  2. Le compilateur rejette le programme car on ne peut pas redéfinir une méthode en restreignant sa visibilité.
  3. Le compilateur génère uniquement un avertissement (warning) mais accepte le code.
  4. La méthode privée masque totalement la méthode publique de la superclasse.

Réponse correcte : Le compilateur rejette le programme car on ne peut pas redéfinir une méthode en restreignant sa visibilité.

Explication : L'exercice 5 montre explicitement qu'il est interdit de réduire la visibilité d'une méthode lors de sa redéfinition dans une classe dérivée.

Question 2

Comment est déterminé le choix de la méthode exécutée lors d'un appel polymorphe en Java ?

  1. Le choix est fait uniquement à la compilation selon le type de la variable.
  2. Le choix est fait dynamiquement pendant l'exécution selon le type réel de l'objet.
  3. Le choix dépend uniquement du nom du fichier source.
  4. Le compilateur choisit toujours la méthode de la superclasse par défaut.

Réponse correcte : Le choix est fait dynamiquement pendant l'exécution selon le type réel de l'objet.

Explication : Comme l'illustrent les exercices sur la liaison dynamique, le code exécuté pour une méthode redéfinie est sélectionné au moment de l'exécution en fonction de la nature réelle de l'objet instancié.

Question 3

Que se produit lors de l'accès aux champs d'un objet (comme i) lorsque l'objet est manipulé via une référence de type superclasse ?

  1. L'accès aux champs bénéficie du même polymorphisme dynamique que les méthodes.
  2. L'accès se fait toujours vers le champ défini par le type réel de l'objet.
  3. Il n'y a pas de dynamisme pour l'accès aux champs ; le type est déterminé à la compilation.
  4. Le compilateur provoque systématiquement une erreur fatale.

Réponse correcte : Il n'y a pas de dynamisme pour l'accès aux champs ; le type est déterminé à la compilation.

Explication : L'exercice 9 démontre que contrairement aux méthodes, l'accès aux attributs ou champs de classe est résolu statiquement en fonction du type déclaré de la variable.





Télécharger TD 5 de Programmation Orientée Objet : Classes et Héritage pdf