[ALG2] for each

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [ALG2] for each

Message  Terminatour le Sam 16 Oct 2010, 19:55

Bonsoir,

j'aurai une petite question concernant le TD2 de alg.
En fait il nous est demandé de:
2. ListeIsbn
Créez une classe ListeIsbn. Cette classe container servira à mémoriser des Isbn. Utilisez un
ArrayList comme container interne. Votre classe va-t-elle hériter d'une collection ou composer
une collection ? Écrivez une méthode de test qui itère sur la liste des Isbn afin de vous remémorer
ce concept (pour l'itération sans modifications, prenez dès maintenant l'habitude d'utiliser un
forEach).

Mon code marche mais je voudrais en fait pouvoir hériter d'ArrayList pour ne pas devoir réécrire bon nombre de méthodes.
ceci est l'entête de la classe de ListeIsbn:
Code:
public class ListeIsbn extends ArrayList<Isbn> implements Iterable <Isbn> {
En faisant mon for each et en imprimant les résultats j'obtiens rien du tout.

Cependant si je mets à la place:
Code:
public class ListeIsbn  implements Iterable <Isbn> {
(et biensûr que je rajoute une petite méthode add pour les tests)
J'arrive à afficher des résultats.


Donc voilà mon programme marche dans le second cas mais je trouve pas çà efficient efficace et propre.

Si vous auriez une petite idée, je suis preneur
Wink


Dernière édition par Terminatour le Lun 01 Nov 2010, 12:01, édité 3 fois

Terminatour

Nombre de messages : 344
Age : 25
Prénom : Louis-Julien
Statut : statutaire
Localisation : localisée
Date d'inscription : 04/10/2009

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  mcd le Sam 16 Oct 2010, 21:50

Bizarre,
À première vue la première solution devrait fonctionner (avec même le implement en trop vu que le ArrayList l'implémente déjà).
Maintenant la deuxième solution est préférable pour de nombreuses raisons.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  Terminatour le Sam 16 Oct 2010, 22:46

merci pour la réponse Smile

quels raisons par exemple ?

Terminatour

Nombre de messages : 344
Age : 25
Prénom : Louis-Julien
Statut : statutaire
Localisation : localisée
Date d'inscription : 04/10/2009

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  mcd le Sam 16 Oct 2010, 23:30

Citons :
- La sémantique : Une Liste d'ISBN n'est pas une ArrayList. Au mieux c'est une List mais ça pourrait être une autre sorte de Collection. ArrayList n'est qu'un choix d'implémentation pour la réaliser. Utiliser l'héritage c'est rendre ce choix public -> plus moyen de changer par la suite car le code qui utilise ListeISBN peut utiliser des particularités de ArrayList. Ainsi, si on se rend compte par la suite que LinkedList ou une Map eut été mieux, trop tard.
- Les fonctionnalités : Une raison d'hériter c'est de disposer de méthodes à bon compte mais on est obligé de tout hériter même ce qui n'avait pas été prévu (la possibilité d'enlever un élément de la liste, de récupérer un ISBN via un indice, de remplacer un ISBN par un autre, ...)

Utiliser un attribut plutôt qu'un héritage oblige à écrire des méthodes simples de redirection mais permet un meilleur contrôle.
Le seul inconvénient est un léger ralentissement mais les compilateurs et JVM actuels s'en sortent bien pour minimiser la perte.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  aro le Dim 17 Oct 2010, 12:48

Terminatour a écrit:Mon code marche mais je voudrais en fait pouvoir hériter d'ArrayList pour ne pas devoir réécrire bon nombre de méthodes.
Sauf que ce qui est demandé c’est "Utilisez un ArrayList comme container interne." et qu’une méthode add avec une instruction suffit pour l’exercice.
Terminatour a écrit:En faisant mon for each et en imprimant les résultats j'obtiens rien du tout.
Je dirais que c’est parce que tu as changé l’en-tête, enlevé la méthodes add (+ éventuellement les autres pour supprimer,…), que tu as gardé le container interne et le for each tel qu’il était et donc que tu ajoutes dans une liste mais que tu en parcours une autre (qui est vide).

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  Terminatour le Dim 17 Oct 2010, 16:21

merci Mme Aro et Mr Mcd, tout est clair à présent Problem solved

Terminatour

Nombre de messages : 344
Age : 25
Prénom : Louis-Julien
Statut : statutaire
Localisation : localisée
Date d'inscription : 04/10/2009

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  Terminatour le Sam 30 Oct 2010, 15:12

En fait il y a encore un peu de flou ...

j'ai quand même encore une question Mme Aro, je suis occupé à re-modifier le code comme on doit le réutiliser dans le TD4. Sous le points "ce qui est en trop" il est inscrit ma méthode public Iterator<Isbn> dans ListeIsbn.
C'est plutôt curieux non ? car en utilisant une ArrayList comme container interne, pour la parcourir j'ai besoin d'un for each, donc besoin d'implémenter iterable et donc le besoin de overrider cette méthode pourquoi elle serait en trop alors ? kEzaKo ?

Encore une petite question pour la route, il n'y a pas le TD5, sur poEsi, je sais qu'on est censé faire le 4 maintenant mais comme on a du temps, j'aimerai bien m'avancer.

Bonjour chez vous, Bon congé, Halloween et tout le bardaf

Terminatour

Nombre de messages : 344
Age : 25
Prénom : Louis-Julien
Statut : statutaire
Localisation : localisée
Date d'inscription : 04/10/2009

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  aro le Lun 01 Nov 2010, 09:33

Terminatour a écrit:Sous le points "ce qui est en trop" il est inscrit ma méthode public Iterator<Isbn> dans ListeIsbn.
C'est plutôt curieux non ? car en utilisant une ArrayList comme container interne, pour la parcourir j'ai besoin d'un for each, donc besoin d'implémenter iterable et donc le besoin de overrider cette méthode pourquoi elle serait en trop alors ? kEzaKo ?
ArrayList implémente déjà Iterable => ta méthode "public Iterator<Isbn> iterator()" dans ListeIsbn est en trop parce que "implements Iterable<Isbn>" pour ListeIsbn est en trop
Terminatour a écrit:Encore une petite question pour la route, il n'y a pas le TD5, sur poEsi, je sais qu'on est censé faire le 4 maintenant mais comme on a du temps, j'aimerai bien m'avancer.
Ok, je regarde pour le publier.

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG2] for each

Message  Contenu sponsorisé Aujourd'hui à 15:15


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum