Page 1 sur 1

TP7 - Question 3

Publié : 17 déc. 2017 23:18
par bcalendreau
Bonjour,

Je ne parviens pas à passer tous les tests à la question 3.
Alors je tâtonne, et je commence par vérifier avec les classes qui ont le moins de méthode.

J'ai cette erreur par exemple :
8) test_java_util_AbstractSet(question3): nombre de methodes heritees errone ??? expected:<19> but was:<21>

Or, si je compte à la main le nombre de méthodes héritées non redéfinies (c'est assez rapide à faire via la javadoc), je tombe bien sur 21 !

On ajoute toutes les méthodes de la classe AbstractCollection et Object, on enlève un toString() vu qu'il est redéfini dans la classe AbstractCollection et les 3 méthodes redéfinies par la classe AsbtractSet, et ça fait 21.

Pour simplifier les choses , dans la javadoc meme :
Methods inherited from class java.util.AbstractCollection
add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, toArray, toArray, toString
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Ce qui fait 21. Y'aurait-il une erreur dans les tests jnews ?
Ai-je loupé quelque chose ?

Merci beaucoup !

Re: TP7 - Question 3

Publié : 18 déc. 2017 10:11
par pthellier
Si cela peut t'aider, ci-dessous les 19 méthodes que j'obtiens :

public boolean java.util.AbstractCollection.contains(java.lang.Object)
protected void java.lang.Object.finalize() throws java.lang.Throwable
protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
public boolean java.util.AbstractCollection.addAll(java.util.Collection)
public java.lang.String java.util.AbstractCollection.toString()
public java.lang.Object[] java.util.AbstractCollection.toArray(java.lang.Object[])
public java.lang.Object[] java.util.AbstractCollection.toArray()
public boolean java.util.AbstractCollection.retainAll(java.util.Collection)
public boolean java.util.AbstractCollection.add(java.lang.Object)
public final native void java.lang.Object.notify()
public boolean java.util.AbstractCollection.containsAll(java.util.Collection)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public void java.util.AbstractCollection.clear()
public boolean java.util.AbstractCollection.isEmpty()
public final native java.lang.Class java.lang.Object.getClass()
public boolean java.util.AbstractCollection.remove(java.lang.Object)
public final native void java.lang.Object.notifyAll()

Re: TP7 - Question 3

Publié : 18 déc. 2017 11:06
par bcalendreau
Oui, ça m'a aidé, je passe tous les tests !
Merci beaucoup

Re: TP7 - Question 3

Publié : 18 déc. 2017 12:44
par VincentRIFA
Pour moi cette question est un véritable casse-tête...
mes getDeclaredMethods() sur les superclasses me remontent plein de méthodes parasites:
ex pour AbstractSet :
private static int java.util.AbstractCollection.hugeCapacity(int)
private static native void java.lang.Object.registerNatives()

Qui n'apparaissent même pas dans la javadoc... :(

Est que ça vous les remontait aussi ?
Ou est ce que ça viendrait de ma config ?

Merci,
Vincent

Re: TP7 - Question 3

Publié : 18 déc. 2017 12:52
par pthellier
les méthodes privées ne sont pas héritées.

Re: TP7 - Question 3

Publié : 18 déc. 2017 15:06
par VincentRIFA
Arf, j'avais raté ça... :(

Merci beaucoup pour ton aide !
Je vois enfin le bout du tunnel ! :D

Re: TP7 - Question 3

Publié : 18 déc. 2017 19:26
par bcalendreau
C'est vrai que c'est logique, mais pour les méthodes abtract, techniquement parlant elles sont bien héritées et non redéclarées... Pourtant il ne faut pas les prendre en compte pour la question

Re: TP7 - Question 3

Publié : 18 déc. 2017 19:46
par matthieu
Bonjour,

Je rebondis sur ce topic, car je ne passe pas tous les tests Jnews..
Et pourtant j'agrège, je crois correctement les méthodes héritées non redéfinies : en gros je fais une liste contenant les classes héritées et déclarées de la super classe, puis j'enlève les classes qui sont redéfinies dans la classe fille, puis je ne garde que les méthodes visibles (pas de private ni de "public default" via les modifiers) .

Avec cet algo j'obtiens parfois des résultats probants (exemple de AbstractSet ci-dessus, ou abtractCollection) mais ça reste hors des clous des tests jnews...

Quelqu'un peut-il m'orienter et me dire ce qui cloche dans cette façon de faire ? car je tourne en rond, rond, rond...
Merci par avance !

Re: TP7 - Question 3

Publié : 18 déc. 2017 19:56
par bcalendreau
Vérifies-tu que tu n'as pas de doublon par exemple si une méthode a été redéclarée par une superclass ?
Il faut bien prendre toutes les méthodes public aussi, ne pas checker seulement le nom des méthodes, mais aussi le nombre et types de paramètres.

Re: TP7 - Question 3

Publié : 18 déc. 2017 20:17
par matthieu
Merci pour ta réponse bcalendreau,

Pour les doublons, j'utilise en fait un ensemble et quant aux méthodes, la méthode equals() ne prend-elle pas en compte ces modalités (paramcount, type, etc) ?

Je testerai plus tard avec chaque paramètre...

Merci

Re: TP7 - Question 3

Publié : 18 déc. 2017 20:35
par bcalendreau
De la javadoc "Two Methods are the same if they were declared by the same class and have the same name and formal parameter types and return type."

Donc ça ne fonctionnera pas dans le cas de l'exercice puisqu'elles ne sont pas déclarées par la même classe, il y aura donc des doublons.