ED5: question sur l'énoncé - Template Method

Programmation Avancée

Modérateur : Douin

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

ED5: question sur l'énoncé - Template Method

Message par Ruddy Reisberg » 29 nov. 2016 15:57

Bonjour,
Sur l'énoncé de l'ED5 (http://lmi92.cnam.fr/NFP121/supports/po ... ns/enonce/),

avant la question 1, on trouve cette phrase:
Seules les méthodes ajouter et iterator sont laissées à la responsabilité des sous-classes, en rappel le patron Template Method
1) Cela signifie-t-il que toutes les méthodes appelées dans l'interface (sauf ajouter et iterator) doivent être progammées dans une sous classe, et que les méthodes ajouter et iterator dans une autre à part? Ou bien qu'on ne définit dans une sous classes que les méthodes ajouter et iterator et on ne s'occupe pas des autres (bizarre)?

2) Une question générale sur le Template Method: on sait qu'il permet de déléguer des taches aux sous classes (savoir faire faire), mais concrètement, comment ca se passe? Dans le cadre de l'ED, l'interface ne fait qu'appeler des méthodes qui seront définies entièrement dans les classes filles, est cela la réalisation du Patron Template Method?

Merci par avance!

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

Re: ED5: question sur l'énoncé - Template Method

Message par Ruddy Reisberg » 29 nov. 2016 16:00

3)Et on est bien d'accord qu'on ne programme SURTOUT PAS le contenu des méthodes dans l'interface elle meme vu que c'est une classe abstraite n'est ce pas?

4) Encore un truc que je ne comprends pas sur Template Method (décidément...):
boolean ajouter(E e);
Que signifie le E devant le nom de la collection e?

XavierB
Messages : 24
Inscription : 14 oct. 2016 13:45

Re: ED5: question sur l'énoncé - Template Method

Message par XavierB » 29 nov. 2016 16:18

3) oui, pas de contenu de méthode dans les interfaces

4) E = Element si je me rappelle bien

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

Re: ED5: question sur l'énoncé - Template Method

Message par Ruddy Reisberg » 29 nov. 2016 16:43

Ah très bien merci pour ces précisions!


Je suis en train de faire l'ED en question et je suis tombé sur un morceau de code que je ne comprends pas dans la correction:
public boolean ajouter(CollectionI<E> c){
boolean res = false;
for(E e : c){
boolean b = ajouter(e);
res = res || b;
}
return res;
}
Lignes problématiques:

boolean b = ajouter(e);
Comment peut on utiliser la méthode ajouter() alors qu'on ne lui a indiqué nulle part comment ajouter un élément à la collection !?!


res = res || b;
Que signifie cette ligne?

XavierB
Messages : 24
Inscription : 14 oct. 2016 13:45

Re: ED5: question sur l'énoncé - Template Method

Message par XavierB » 29 nov. 2016 16:47

- La procédure "ajouter" est déporté dans une sous classe qui sait le faire, on laisse faire par un autre

- l'operateur || équivaut à ou.

bon courage ...

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

Re: ED5: question sur l'énoncé - Template Method

Message par Ruddy Reisberg » 29 nov. 2016 17:05

Merci encore pour ces précisions.
l'operateur || équivaut à ou.
5)D'accord mais tu es bien d'accord que, même si la condition b est vraie, vue que res est déclaré constamment faux 3 lignes au dessus, res sera au final toujours faux (vrai ou faux =faux)

6) Nouvelle question au passage:
if(o==null || !(o instanceof CollectionI)) return false;
CollectionI<E> c = (CollectionI<E>)o;
Je ne comprends pas la logique de ces deux lignes:
Dans la première on demande que, dans le cas ou o n'est pas une CollectionI on dit false d'office! Sinon on poursuit.
Dans la deuxième, on décide de mettre o au même "format" que CollectionI:
Mais on vient de dire dans la première ligne que o etait forcément un CollectionI (en utilisant instanceOf). Sinon on aurait renvoyé false. A quoi sert la deuxième ligne?

Merci par avance

XavierB
Messages : 24
Inscription : 14 oct. 2016 13:45

Re: ED5: question sur l'énoncé - Template Method

Message par XavierB » 29 nov. 2016 17:26

5 )Dans le cas suivant, on veut savoir à la fin de chaque tour de boucle si le résultat s'est bien déroulé.
Du coup, on prend le résultat de la boucle précédente OU celui de l'ajout ...

res = res || b;

cela donne un résultat global

6) oui, mais non ;)
o est constaté "Objet" donc ca compile pas, t'es obligé de le caster !

Perso, je galère sur le TP6, je croyais avoir trouvé la solution du WhileL mais ... non :(

Ruddy Reisberg
Messages : 21
Inscription : 01 nov. 2016 16:13

Re: ED5: question sur l'énoncé - Template Method

Message par Ruddy Reisberg » 29 nov. 2016 17:29

Xavier avait raison les méthodes sont décrites dans la suite en créant la classe Sac<E> (voir citation ci-dessous)

7) Mes nouvelles questions:
1)Comment a-t-on eu le réflexe de créer un Vector<E>?
2)En quoi est ce pertinent de choisir Vector dans le cadre de la construction de Sac<E>?
public class Sac<E> extends IncompleteCollection<E>{
private Vector<E> vecteur;

public Sac(){
this.vecteur = new Vector<E>();
}

public boolean ajouter(E e){
return vecteur.add(e);
}
public Iterator<E> iterator(){
return vecteur.iterator();
}

}

Répondre

Qui est en ligne ?

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