TP5 - Question 1 submit

Programmation Avancée

Modérateur : Douin

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

TP5 - Question 1 submit

Message par bcalendreau » 04 nov. 2017 20:41

Bonjour,

J'ai épuisé le nombre maximal de tentatives (consciemment pour la dernière soumission) parce que je ne comprends pas pourquoi le message d'erreur suivant est retourné :
"There was 1 failure: 1) test_appel_union_diff_inter_dans_diffSym(question1): Un appel à la méthode diff est requis ???"

J'ai tenté donc d'utiliser diff(), pour ensuite avoir un message qui indique qu'il ne faut pas utiliser addAll (si je me souviens bien).
Je trouve ça un peu étonnant d'être forcé à utiliser telle ou telle méthode surtout quand un appel à diff() me paraît pas plus approprié que ma méthode pour arriver à la différence symétrique.

Me trompe-je ?

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

Re: TP5 - Question 1 submit

Message par Douin » 04 nov. 2017 22:33

Bonsoir, de la même façon que vous utilisé addAll dans la méthode union,

Pour la différence symétrique, il vous faut utiliser les méthodes que vous avez développées cf la formule fournie,

Bonne fin de tp5

gab90
Messages : 9
Inscription : 02 oct. 2017 20:32

Re: TP5 - Question 1 submit

Message par gab90 » 05 nov. 2017 21:03

Bonjour,

Je me permets de "up" ce sujet, car je suis aussi confronté à 10 échecs (sur les 31) pour cette question 1, alors que mon IHM fonctionne exactement à l'identique de l'IHM de référence (en comparant en direct, en rentrant les mêmes séquences de données dans les champs sur les 2 IHM, les 4 boutons me donnent les mêmes résultats. Mes classes de test fonctionne également. Ce qui me laisse à penser que mes méthodes fonctionnent).

Est-ce si grave de ne pas utiliser exactement une seule et même méthode alors que l'on arrive quand même au résultat obtenu ?

Par exemple, voilà comment j'ai fait pour les méthodes intersection et différence :
public Ensemble<T> inter(Ensemble<? extends T> e) {
TreeSet<T> s1 = new TreeSet<T>(e);

this.retainAll(s1);

return this;
}



public Ensemble<T> diff(Ensemble<? extends T> e) {
TreeSet<T> s1 = new TreeSet<T>(e);

this.removeAll(s1);

return this;
}
Pour ces 2 méthodes JNEWS me renvoie une erreur en me demandant pourquoi je n'ai pas utilisé la méthode addAll...
C'est un peu gênant je trouve de n'accepter qu'une seule méthode pour arriver à un résultat alors qu'au fond on a compris la logique de la méthode et qu'on arrive à l'objectif demandé.

Est-ce à des fins d'optimisation du code ? De performance à l'exécution ?

Merci par avance.

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

Re: TP5 - Question 1 submit

Message par Douin » 05 nov. 2017 22:18

Bonsoir, votre solution ne fonctionne que pour des éléments qui possèdent une relation d'ordre, du coup votre ihm fonctionne aussi( ce sont des String),

Derrière ces tests il y a souvent, une idée de 'bon' développement, la création locale d'un Ensemble, l'usage de this.addAll reflètent a notre avis le bon usage des collections,

Bien entendu il y a n solutions pour la même chose, comment évaluer la qualité du code fourni ? c'est un vaste sujet qui mériterait une autre unité

Merci de me l'avoir signalé, ce sont les tests jnews* qui doivent être enrichis pour que votre implémentation lève une erreur


Bonne soirée,
Ps 10 échecs c'est beaucoup
*de nouveaux tests ont été ajoutés, portant sur l'ajout d'éléments sans relation d'ordre

gab90
Messages : 9
Inscription : 02 oct. 2017 20:32

Re: TP5 - Question 1 submit

Message par gab90 » 06 nov. 2017 0:21

Bonsoir et merci pour votre retour.

En modifiant le codage des 4 méthodes (union, inter, diff, diff_symetrique), j'ai pu descendre à 6 erreurs (j'ai abandonné les TreeSet, et j'ai utilisé addAll comme me le disait les commentaires jnews).

Du coup sur ces 6 erreurs il me reste pour la majorité des erreurs du type...
test_instance_non_modifiée_1(question1): l''ensemble est-il modifié par l''appel de union ??? expected:<2> but was:<4>
J'avoue ne pas comprendre ces erreurs...


Bonne soirée.

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

Re: TP5 - Question 1 submit

Message par Douin » 06 nov. 2017 8:59

Bonjour,
et j'ai utilisé addAll comme me le disait les commentaires jnews)
et l'énoncé :
Aide :

° voir les méthodes xxxAll spécifiées dans l'interface java.util.Collection (aucune boucle n'est nécessaire ! pour la réalisation de ces 4 méthodes). Dans la javadoc, "... adds each object ..." signifie "... calls add() for each object ..."
°° ((e union e1) - (e inter e1))
relisez celui-ci, il est écrit
Attention chaque opération retourne un nouvel ensemble, comme le suggère cette signature de la méthode "union"
public Ensemble<T> union( Ensemble<? extends T>e1) ...
Une utilisation possible :
Ensemble e = ...
System.out.println(" union de e et de e1 : " + e.union(e1));
ce sont des opérations qui engendrent un nouvel ensemble... Là les tests jnews ont bien filtrés...

Bonne fin de tp

gab90
Messages : 9
Inscription : 02 oct. 2017 20:32

Re: TP5 - Question 1 submit

Message par gab90 » 07 nov. 2017 0:24

Bonsoir,

En fait désolé mais je ne comprends pas l'intérêt de nous imposer une méthode précise. J'avais pourtant réussi à faire fonctionner (conformément à l'applet de référence) l'application et les méthodes (union, inter, diff, diffsym) ne faisaient pas plus de 4 lignes.


De ce que je comprends, c'est que l'on a pas le droit de modifier l'instance de la classe (this). Celle-ci doit rester la même en sortie de méthode ? Mais dans quel intérêt ?

De même, dans la méthode diffSym, JNEWS demande d'utiliser la méthode inter, alors que l'on peut aisément s'en passer.

Mais bon je pense que quelque chose doit m'échapper pour cette question 1.

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

Re: TP5 - Question 1 submit

Message par Douin » 07 nov. 2017 11:12

Bonjour, merci de poursuivre ce fil de discussions
En fait désolé mais je ne comprends pas l'intérêt de nous imposer une méthode précise. J'avais pourtant réussi à faire fonctionner (conformément à l'applet de référence) l'application et les méthodes (union, inter, diff, diffsym) ne faisaient pas plus de 4 lignes.
L'intérêt caché est d'utiliser le patron Template Method, de comprendre pourquoi la méthode addAll déclenche votre méthode add (cf. l'énoncé)

Faire fonctionner un bout de programme est à la portée de tous, dans cette unité nous essayons d'utiliser des recettes (des patrons), de comprendre ce que l'on fait dans un contexte de langages à objets, le contenu d'une unité en L3 somme toute

L'applette de référence fonctionne avec des "String" ce qui ne représente qu'une partie des utilisations possibles de cet ensemble, ce qui explique aussi que vous passiez les tests avec une implémentation de type TreeSet, c'est corrigé depuis...
De ce que je comprends, c'est que l'on a pas le droit de modifier l'instance de la classe (this). Celle-ci doit rester la même en sortie de méthode ? Mais dans quel intérêt ?
Là c'est une question d'architecture, devons nous installer les opérations sur les ensembles dans la classe ensemble ? ou à l'extérieur ?, les opérations doivent-elles modifier l'ensemble receveur ? nous avons choisi cette solution non intrusive pour l'objet receveur,
Dans le corrigé je vous proposerai une classe dédiée aux opérations (à l'image de la classe Collections/Collection)
De même, dans la méthode diffSym, JNEWS demande d'utiliser la méthode inter, alors que l'on peut aisément s'en passer.
cf. l'énoncé, la formule de math est directement traduite en java, à l'aide des 3 méthodes que vous venez d'écrire, pour une fois qu'on ne vous demande pas de développer...

En conclusion dans cette unité, vous devez garder votre esprit critique et proposer un code peu perfectible, issu d'un raisonnement étayé, ce n'est pas facile, par exemple l'usage des patrons au bon moment n'est pas inné.

Bonne fin de tp

gab90
Messages : 9
Inscription : 02 oct. 2017 20:32

Re: TP5 - Question 1 submit

Message par gab90 » 07 nov. 2017 21:58

Bonsoir,

J'avais bien penser à utiliser notamment la méthode inter pour diffSym (pour isoler les éléments communs aux 2 vector), comme conseillé dans l'énoncé, mais ça ne fonctionnait pas (ça renvoyait un vector vide). Mais ça venait certainement de ma mauvaise implémentation des 3 autres méthodes (union-inter-diff). Cette fois en les corrigeant ça fonctionne enfin, merci.

D'accord je comprends mieux, je crois que je n'arrive pas encore bien à saisir justement le bon usage des patrons (quand et comment bien les utiliser).


Merci pour vos réponses,
Bonne soirée
Gabriel

manuel.lb
Messages : 24
Inscription : 29 oct. 2017 16:59

Re: TP5 - Question 1 submit

Message par manuel.lb » 11 nov. 2017 22:13

Bonsoir,

Sur cette même question, j'ai l'erreur suivante sur JNEWS :
test_appel_addAll_retainAll_dans_inter(question1): Un appel à la méthode addAll est requis ???

J'ai initialement utilisé union plutôt que addAll pour la première étape du calcul ; pour économiser une ligne à mes doigts fatigués.
Je suis bien conscient que union provoque des instanciations temporaires que l'on n'a pas avec addAll, mais après tout on procède de même avec l'implémentation de diffSym : est-ce que ce n'est pas une possibilité "acceptable" dans le même ordre d'idée ?

Répondre

Qui est en ligne ?

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