Skip to topic | Skip to bottom
Home
Minfo
Minfo.GlooTD2r1.1 - 12 Sep 2007 - 14:12 - PhilippeCollettopic end

Start of topic | Skip to actions

TD 2 : Réfléxivité en Java

PhilippeCollet (d'après un TD réalisé avec MichelBuffa)

Exercice 1 : un analyseur de classes

Ecrivez une programme qui attend qu'on tape au clavier le nom d'une classe puis qui affiche à l'écran, si possible avec une indentation significative, toutes les informations relatives à cette classe. On ne demande que les membres définis dans la classe, pas ceux qui sont hérités.

Voici un exemple d'utilisation avec la classe Date.

Voici un squelette de la classe AnalyseurDeClasse.java. Vous devez compléter le code. N'oubliez de travailler de manière incrémentale (d'abord au moins le nom de la classe, puis les classes ancêtres, etc).

ALERT! Pour commencer, ne vous occupez pas de la généricité : partout ou vous manipulerez un objet de type "Class", vous l'afficherez simplement par son nom en utilisant la méthode getName. Si vous passez beaucoup de temps sur ce premier exercice, il vaut mieux ne pas vous occuper du tout de la généricité et d'abord passer aux deux exercices suivants.

Exercice 2 : une méthode toString générique

Ecrivez, dans la classe BebeteAbstraite du précédent projet, une méthode :

public String toString() {...}

...qui affiche le nom des attributs et leur valeur, mais sans en connaître le nombre ni le type à l'avance.

N'essayez pas de voir les attributs hérités dans un premier temps. En effet, la méthode getDeclaredFields() de la classe Class ne retourne que les attributs locaux.

Pour tester la méthode, faites par exemple afficher régulièrement les caractéristiques d'une bébête du simulateur sur la sortie standard (prenez par exemple la première bébête dans le moteur de simulation du ChampDeBebetes).

Exercice 3 : un tableau grossissant

Travail à effectuer

  • Récupèrez le fichier ArrayGrowTest.java, tiré du livre Core Java ("au coeur de Java" dans la version française).
  • Complétez la méthode goodArrayGrow(...) pour qu'elle fonctionne.

Dans un premier temps laissez les deux lignes :

 //a = (int[])goodArrayGrow(a); 
 //arrayPrint(a); 

...en commentaires.

Ce que vous devez obtenir c'est :

javaw ArrayGrowTest

Personne[12]
Maurice Chombier
François Pignon
null
null
null
null
null
null
null
null
null
null
The following call will generate an exception.
java.lang.ClassCastException: [Ljava.lang.Object;
   at ArrayGrowTest.main(ArrayGrowTest.java:40)
Exception in thread "main" 
Process ArrayGrowTest exited abnormally with code 1

Tous les "null" qui s'affichent sont normaux, ils prouvent que votre tableau a grossi.

Décommentez maintenant les deux lignes correspondant au tableau de int. Ca devrait ne plus marcher... Essayez de faire quand même marcher le programme (aide: utilisez la classe Array) !

Pour ceux qui s'ennuient...

  • Terminez l'analyseur de classes pour qu'ils affichent correctement toutes les informations de généricité de la classe analysée.

  • Reprenez l'exercice 2, écrivez un écouteur du clic souris sur le champ de Bebetes, repérez la bébête la plus proche et affichez ses caractéristiques avec toString dans une fenêtre spécifique.

-- PhilippeCollet - 12 Sep 2007
to top


You are here: Minfo > GLOO > GlooTD2

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback