TP7 - Question 3

Programmation Avancée

Modérateur : Douin

Répondre
bcalendreau
Messages : 37
Inscription : 07 oct. 2017 20:27

TP7 - Question 3

Message par bcalendreau » 17 déc. 2017 23:18

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 !

pthellier
Messages : 29
Inscription : 10 oct. 2017 13:52

Re: TP7 - Question 3

Message par pthellier » 18 déc. 2017 10:11

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()

bcalendreau
Messages : 37
Inscription : 07 oct. 2017 20:27

Re: TP7 - Question 3

Message par bcalendreau » 18 déc. 2017 11:06

Oui, ça m'a aidé, je passe tous les tests !
Merci beaucoup

VincentRIFA
Messages : 15
Inscription : 01 nov. 2017 19:19

Re: TP7 - Question 3

Message par VincentRIFA » 18 déc. 2017 12:44

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

pthellier
Messages : 29
Inscription : 10 oct. 2017 13:52

Re: TP7 - Question 3

Message par pthellier » 18 déc. 2017 12:52

les méthodes privées ne sont pas héritées.

VincentRIFA
Messages : 15
Inscription : 01 nov. 2017 19:19

Re: TP7 - Question 3

Message par VincentRIFA » 18 déc. 2017 15:06

Arf, j'avais raté ça... :(

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

bcalendreau
Messages : 37
Inscription : 07 oct. 2017 20:27

Re: TP7 - Question 3

Message par bcalendreau » 18 déc. 2017 19:26

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

matthieu
Messages : 3
Inscription : 12 nov. 2017 16:46

Re: TP7 - Question 3

Message par matthieu » 18 déc. 2017 19:46

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 !

bcalendreau
Messages : 37
Inscription : 07 oct. 2017 20:27

Re: TP7 - Question 3

Message par bcalendreau » 18 déc. 2017 19:56

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.

matthieu
Messages : 3
Inscription : 12 nov. 2017 16:46

Re: TP7 - Question 3

Message par matthieu » 18 déc. 2017 20:17

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

bcalendreau
Messages : 37
Inscription : 07 oct. 2017 20:27

Re: TP7 - Question 3

Message par bcalendreau » 18 déc. 2017 20:35

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.

Répondre

Qui est en ligne ?

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