tp-commit question 1

Programmation Avancée

Modérateur : Douin

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

tp-commit question 1

Message par CHEGHANNOU » 25 nov. 2018 13:14

Bonjour,

j'ai pas mal bloqué sur la question 1 du TP commit.
En fait c'est l'utilisation de instanceof dans la classe groupe de contributeur qui m'a posé problème. Cette utilisation me générait 3 échecs aux tests JNews.
J'ai donc implémenter un visiteur<Cotisant> comme il est préconiser de le faire avec les composites. Dans celui-ci j'ai quand même du utiliser instanceof. Et là les tests sont passés.


J'ai donc plusieurs question :
le visiteur doit-il bien être de forme"visiteur<Cotisant>" ?
utiliser instanceof est-il valide dans le visiteur ?
Y a-t-il une autre façon de faire ?

Merci pour votre aide

JC

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

Re: tp-commit question 1

Message par CHEGHANNOU » 25 nov. 2018 14:57

je me suis emmêler les pinceaux, sa fonctionne bien sans utiliser instanceof dans le visiteur.

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

Re: tp-commit question 1

Message par rousset » 25 nov. 2018 16:10

Hello,
Je suis toujours content de voir que je ne suis pas le seul à butter.
J'ai vu ton 'post', après avoir eu l'échec à JNews comme toi, et avant que tu y répondes.
Entre temps j'avais vu ça sur le forum : viewtopic.php?f=40&t=13876&hilit=commit ... 6ccabcc0e8
Le lien indique :
"Attention ce n'est pas objet si vous devez faire un test sur le noeud du composite ... imaginez que l'on ajoute une dizaine de nouveaux types de noeuds et votre programme devrait contenir au moins 10 tests (instanceof) de plus, laissez la liaison dynamique s'exécuter"
public Void visite(GroupeDeContributeurs g){
for( Cotisant c : g)
c.accepter(this);
}
J'ai commencé à m'échauffer l'esprit en envisageant que j'allais tourner en rond, à ne pas comprendre en quoi le corps de fonction ci-dessus devait fonctionner.., à ne pas faire le "lien" tout de suite à propos de la liaison dynamique et puis ça m'est venu.
Contributeur et GroupeContributeurs implémentent la méthode nombreDeCotisants() : le Groupe renvoit la somme des Contributeurs, et le contributeur renvoit la valeur 1. Du coup, en prenant exemple de la méthode "public int nombreDeCotisants()", en parcourant les éléments de l'ensemble GroupeContributeurs (grâce à la méthode getChildren(), à chaque itération, on obtient soit une incrémentation directe du nombre (nombreDeCotisants) si l'instance d'objet est un Contributeur, soit un total obtenu après parcourt d'un autre ensemble, si l'instance d'objet est un GroupeDeContributeurs.
Ca donne "for(Cotisant c: getChildren()) { ... }.
Voilà même si je n'utilise probablement pas les bons termes, que je ne suis pas compréhensible, je me suis dit que j'allais participer en faisant écho à ton message, et que ça servira peut être à quelqu'un d'autre.
Nicolas

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

Re: tp-commit question 1

Message par Tapio » 27 nov. 2018 18:00

Voilà même si je n'utilise probablement pas les bons termes, que je ne suis pas compréhensible, je me suis dit que j'allais participer en faisant écho à ton message, et que ça servira peut être à quelqu'un d'autre.
Merci ! Cela m'a bien servi. On n'est pas obligés d'utiliser des Iterator ?

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

Re: tp-commit question 1

Message par rousset » 27 nov. 2018 18:33

Tapio a écrit :
27 nov. 2018 18:00
Merci ! Cela m'a bien servi. On n'est pas obligés d'utiliser des Iterator ?
Hello,
Ca fait plaisir d'échanger.
Alors, et encore sous toute réserve hein, en fait tu fais déjà appel à l'itérateur en faisant un "for each" ( for (Cotisant c: getChildren) { ... } ).
Avec getChildren tu renvois une classe qui hérite de "List", donc itérable.
J'espère que c'est pas trop flou /fouilli comme retour et que ça suffira.

Répondre

Qui est en ligne ?

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