TP7 question 3

Programmation Avancée

Modérateur : Douin

CHEGHANNOU
Messages : 42
Inscription : 02 oct. 2018 7:10

TP7 question 3

Message par CHEGHANNOU » 01 déc. 2018 21:06

Bonjour,

A la question 3 du TP7, j'ai un bug que je ne m'explique pas :

Quand je test ma méthode static de maniére isolée, j'ai toujours le bon nombre de méthodes (en me référant aux tests JNews)
Exemple :

Code : Tout sélectionner

System.out.println("javax.swing.JButton : " + Introspection.getHeritees("javax.swing.JButton").size() + " méthode(s)");
ce code affiche :
javax.swing.JButton : 429 méthode(s)

Mais quand je test plusieurs méthodes d'affiler ça ne fonctionne plus, le code ci-dessous :

Code : Tout sélectionner

	System.out.println("java.util.AbstractSet : " + Introspection.getHeritees("java.util.AbstractSet").size() + " méthode(s)");
  		System.out.println("java.util.AbstractCollection : " + Introspection.getHeritees("java.util.AbstractCollection").size() + " méthode(s)");
  		System.out.println("java.util.WeakHashMap : " + Introspection.getHeritees("java.util.WeakHashMap").size() + " méthode(s)");
  		System.out.println("java.util.AbstractCollection : " + Introspection.getHeritees("java.util.AbstractCollection").size() + " méthode(s)");
		System.out.println("javax.swing.JButton : " + Introspection.getHeritees("javax.swing.JButton").size() + " méthode(s)");
  		System.out.println("java.util.Stack : " + Introspection.getHeritees("java.util.Stack").size() + " méthode(s)");
  		System.out.println("javax.swing.JApplet : " + Introspection.getHeritees("javax.swing.JApplet").size() + " méthode(s)");
affiche :
java.util.AbstractSet : 19 méthode(s)
java.util.AbstractCollection : 8 méthode(s)
java.util.WeakHashMap : 8 méthode(s)
java.util.AbstractCollection : 8 méthode(s)
javax.swing.JButton : 426 méthode(s)
java.util.Stack : 41 méthode(s)
javax.swing.JApplet : 279 méthode(s)

De manière isolée chacune de ces j'ai toujours le bon nombre de méthodes mais dés que je les regroupe ça me retourne des chiffres erronés.
Seul j'ai 429 méthodes pour javax.swing.JButton en paramètre, mais regroupé avec d'autre appel à la méthode ce chiffre passe à 426 méthodes...

Du coup mes soumissions à JNews ne fonctionne pas.

Est-ce du au fait que les collections que j'utilise ne sont pas thread-safe?

En fait je suis perplexe, toute aide serait la bienvenue.

Merci par avance

Cordialement

JC

CHEGHANNOU
Messages : 42
Inscription : 02 oct. 2018 7:10

Re: TP7 question 3

Message par CHEGHANNOU » 01 déc. 2018 23:04

J'ai réussi à trouvé :
Ça y est j'ai le bon nombre de méthodes dans tous les cas.
J'avais défini une variable de classe qui était modifié simultanément par les appel successifs à la méthode getHeritees().
Maintenant, j'ai le bon nombre de méthodes, mais les méthodes ne sont pas celles attendus.
La HashSet représenté par une String ne correspond pas dans les tests JNews.
Je présume donc que l'on est obligé de construire la hashTable à retourner, en y inserant les méthodes dans le même ordre que celui préconisé par JNews ?
Si oui comment savoir dans quelles ordres elles ont été insérées ?

Merci de votre aide

Douin
Messages : 366
Inscription : 18 mars 2009 15:46

Re: TP7 question 3

Message par Douin » 02 déc. 2018 13:45

Bonjour, peu importe l'ordre, ce que vous voyez est un affichage, bons tests

CHEGHANNOU
Messages : 42
Inscription : 02 oct. 2018 7:10

Re: TP7 question 3

Message par CHEGHANNOU » 02 déc. 2018 13:47

Je suis en monologue mais ça pourra peut-être servir à quelqu'un d'autre ...

En fait je remplaçais des méthodes redéfinis dans la ou les classes filles...

Tapio
Messages : 9
Inscription : 20 oct. 2018 17:09

Re: TP7 question 3

Message par Tapio » 14 déc. 2018 18:18

Je crois que j'ai un soucis de compréhension sur cette question, n'obtenant pas le même nombre de méthodes que sur le tp7q3.jar pour certaines classes.

En utilisant getMethods() on obtient toutes les méthodes, dont héritées, c'est bien ça ? Avec getDeclaredMethods() on a bien toutes les méthodes déclarées dans la classe SANS les méthodes héritées ? Est-ce que je me trompe complètement en pensant que la réponse est l'ensemble de toutes les méthodes sans les méthodes déclarées ?

rousset
Messages : 35
Inscription : 30 sept. 2018 9:23

Re: TP7 question 3

Message par rousset » 14 déc. 2018 18:44

Tapio a écrit :
14 déc. 2018 18:18
Je crois que j'ai un soucis de compréhension sur cette question, n'obtenant pas le même nombre de méthodes que sur le tp7q3.jar pour certaines classes.

En utilisant getMethods() on obtient toutes les méthodes, dont héritées, c'est bien ça ? Avec getDeclaredMethods() on a bien toutes les méthodes déclarées dans la classe SANS les méthodes héritées ? Est-ce que je me trompe complètement en pensant que la réponse est l'ensemble de toutes les méthodes sans les méthodes déclarées ?
Hello,
getMethods() et getDeclaredMethods() c'est comme tu as dit, pas de soucis.
Sauf que.., prends l'exemple de la classe Vector : elle hérite bien de 11 méthodes de Object mais elle en re-défini 4. Du coup ce qui est demandé en fait c'est "les méthodes héritées non redéfinies dans la classe dérivée" (et pas les méthodes héritées stricto sensu).
C'est un retour sous toute réserve hein, mais je ne pense pas mal t'aiguiller.
Cordialement.

NB : à toute fin (in)utile.., si tu as un décalage lorsque tu testes la classe JUnit.framework..., entre tests en local et JNews, c'est un problème de "version". M'en demandes pas plus, je l'ai constaté par hasard, et j'ai bien (sauf grossière erreur de ma part) la dernière version de Junit, et le jdk ne date pas de néandertal. Du coup j'ai entre 47 ou 48 méthodes héritées retenue pour cette classe, là où seules 44 sont attendues. J'ai bien un échec en local, mais c'est ok sur JNews.

Tapio
Messages : 9
Inscription : 20 oct. 2018 17:09

Re: TP7 question 3

Message par Tapio » 14 déc. 2018 18:53

Si je comprends bien ce que tu dis, c'est qu'avec getDeclaredMethods on n'a pas les méthodes héritées redéfinies ? Du coup si on fait getMethods - getDeclaredMethods on a encore les méthodes héritées non redéfinies en trop et c'est pour ça que j'ai plus de prévu ?

J'ai pas encore fait de submit, je sentais bien que ma solution en quelque lignes n'était pas ce qu'on attendait de moi :)

Merci pour les précisions

RENAUD
Messages : 72
Inscription : 21 sept. 2018 19:34

Re: TP7 question 3

Message par RENAUD » 14 déc. 2018 19:01

CHEGHANNOU a écrit :
01 déc. 2018 23:04
J'avais défini une variable de classe qui était modifié simultanément par les appel successifs à la méthode getHeritees().
Maintenant, j'ai le bon nombre de méthodes, mais les méthodes ne sont pas celles attendus.
La HashSet représenté par une String ne correspond pas dans les tests JNews.
Je présume donc que l'on est obligé de construire la hashTable à retourner, en y inserant les méthodes dans le même ordre que celui préconisé par JNews ?
Si oui comment savoir dans quelles ordres elles ont été insérées ?
Bonjour
J'ai eu la même interrogation j'ai laissé finalement un test par appel getHeritees(). J'ai pensé que le fait que la méthode soit static comme les variables et d'autres méthodes les valeurs sont sauvegardées.
Tu dis :
J'avais défini une variable de classe qui était modifié simultanément par les appel successifs à la méthode getHeritees().
En quoi ce serait un problème si ce n'est pas static et non remis à null à la fin de la méthode ce que j'ai fait à un moment donné mais ayant beaucoup de méthode et variable static et peut-être l'autre problème avec jnews que tu mentionne j'ai donc laissé méthode/par appel.
Mais sinon une variable "normale" serait réinitialisée à chaque appel ?
Qu'en pensez vous ?

rousset
Messages : 35
Inscription : 30 sept. 2018 9:23

Re: TP7 question 3

Message par rousset » 14 déc. 2018 19:46

Tapio a écrit :
14 déc. 2018 18:53
Si je comprends bien ce que tu dis, c'est qu'avec getDeclaredMethods on n'a pas les méthodes héritées redéfinies ? Du coup si on fait getMethods - getDeclaredMethods on a encore les méthodes héritées non redéfinies en trop et c'est pour ça que j'ai plus de prévu ?

J'ai pas encore fait de submit, je sentais bien que ma solution en quelque lignes n'était pas ce qu'on attendait de moi :)

Merci pour les précisions
Oui et c'est rappelé dans le cours, ed, et la java Oracle en ligne : https://docs.oracle.com/javase/8/docs/a ... dMethods--
getDeclaredMethods :
Returns an array containing Method objects reflecting all the declared methods of the class or interface represented by this Class object, including public, protected, default (package) access, and private methods, but excluding inherited methods.
C'est bien que tu prennes du temps avant de soumettre. Moi pas assez..,
En terme de nombre de méthodes héritées tu dois trouver (entre autre) :
HashSet : 16
AbstractSet : 19
ClonePublic : 11 << tu crées une classe perso (ou une classe interne) où tu définis une méthode "public Object clone()[}". Cette classe hérite nativement de 11 méthodes de classe java.lang.Object, dont une méthode "protected Object clone(){}". Son nombre de méthode héritées est bien 11.
JButton : 429
JApplet : 283
AbstractCollection : 10
WeakHashMap : 11
Trouver un "bon nombre de méthodes héritées" ne signifie pas nécessairement d'avoir "retenu" les bonnes ;), bien y penser aussi hein ;)

Enfin j'avais oublié.., le support de cours. Dans les dernières pages (Tp7 Introspection) 90-93 par là.., y a juste presque tout ce qui faut pour résoudre l'exercice. Y a entre autre une méthode pour retourner le nombre de méthodes héritées redéfinies par une classe dérivée... ;)
Nicolas

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité