Type objet

Type objet - Java - Programmation

Marsh Posté le 26-12-2004 à 15:47:30    

Bonjour à tous,  
 
J'ai un p'tit souci pour comparer le type d'objets. Je m'explique. J'ai un  
type Forme. Deux autres types, carre et rectangle, héritent de Forme.
J'ai une liste de type Forme.
Or, j'aimerai à partir de celle liste en construire une nouvelle, qui ne contient que les éléments de type carre.  
Existe t-il une fonction qui pourrait comparer les types, afin de résoudre mon problème?
 
Merci d'avance.

Reply

Marsh Posté le 26-12-2004 à 15:47:30   

Reply

Marsh Posté le 26-12-2004 à 15:50:43    

if (myObject instanceof Carre)
...
 
ou encore
 
myObject.getClass() à comparer à Carre.class()


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 26-12-2004 à 21:33:52    

sircam a écrit :

if (myObject instanceof Carre)
...
 
ou encore
 
myObject.getClass() à comparer à Carre.class()


tu veux une fessée ?

Reply

Marsh Posté le 27-12-2004 à 11:33:12    

nraynaud a écrit :

tu veux une fessée ?


???
C'est tout à fait juste.


---------------
Mon Flickr
Reply

Marsh Posté le 27-12-2004 à 11:43:09    

<nraynaud style="resumed">
instanceof c'est mal.
design patern visitor rulez
bande de nazes
</nraynaud>


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 11:44:14    

maximew a écrit :

???
C'est tout à fait juste.


 
Je vote la suppression de instanceof de java pour que les gens apprennent la programmation correctement :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-12-2004 à 12:18:13    

benou a écrit :

<nraynaud style="resumed">
instanceof c'est mal.
design patern visitor rulez
bande de nazes
</nraynaud>


 
Si vous avez le temps de nous mettre un petit exemple concret de ce DP pour le cas sus-cité...
 

Reply

Marsh Posté le 27-12-2004 à 13:11:05    

Bande d'extrémistes :o
 
Qu'est-ce qui vous dit que les conditions d'applicabilité du pattern sont rencontrées ?
 
Je ne devrais pas me limiter à répondre à la question "Existe t-il une fonction qui pourrait comparer les types, afin de résoudre mon problème?", mais faut pas non plus pousser.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2004 à 13:17:07    

sircam a écrit :


Qu'est-ce qui vous dit que les conditions d'applicabilité du pattern sont rencontrées ?


 
Qu'es-ce qui te dit qu'elles ne le sont pas ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-12-2004 à 13:21:25    

Je n'en sais rien, et c'est pour ça que je m'abstiens de crier aux nazes et de proférer des aphorismes à l'emporte-pièce :)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2004 à 13:21:25   

Reply

Marsh Posté le 27-12-2004 à 13:22:00    

je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze [:cupra]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2004 à 13:29:01    

Ah tiens instanceof c'est mal ? :D M'en était jamais servi mais jme servais de getClass(), et jcrois que c'est mal aussi non ? :D
Y a quoi d'autre alors ? :o

Reply

Marsh Posté le 27-12-2004 à 13:32:11    

the real moins moins a écrit :

je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze [:cupra]


Toi, n'en rajoute pas !  :sol:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2004 à 13:35:31    

the real moins moins a écrit :

je voudrais pas mettre de l'huile sur le feu, mais c'est benou et lui seul qui a crié au naze [:cupra]


spamoi c'est nraynaud :o


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 13:42:22    

Glod 2 a écrit :

Ah tiens instanceof c'est mal ? :D M'en était jamais servi mais jme servais de getClass(), et jcrois que c'est mal aussi non ? :D
Y a quoi d'autre alors ? :o


Beh, y'a "Visitor pattern rulez, instanceof suckz", you know man [:suomi]
 
Sérieusement, je ne serais pas aussi catégorique. Si tu te retrouves, un peu partout, à mélanger des instanceof ou des getClass() avec du code dont ça ne devrait pas être le soucis, alors il est conseillé de visiter le pattern mentionné.
 
Par contre, si les conditions d'applicabilité du pattern ne sont pas remplies, ou que les méthodes ici décriées ne sont utilisées qu'avec parcimonie et de manière ponctuelle et séparée du reste, et que tu sais ce que tu fais, alors je ne vois pas d'obstable à les employer.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2004 à 13:44:34    

sircam a écrit :

et que tu sais ce que tu fais


 
 
On écrit pas du code pour soi, mais pour celui qui va le maintenir :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-12-2004 à 13:44:41    

Bah ça m'est arrivé qu'une ou 2 fois, et c'était quand jfaisais mon projet qui construisait une base de donnée à partir d'un objet donc j'étais obligé d'introspecter et de getClasser :D
 
ok :jap:

Reply

Marsh Posté le 27-12-2004 à 13:52:23    

kadreg a écrit :

On écrit pas du code pour soi, mais pour celui qui va le maintenir :o


Par "tu sais ce que tu fais", j'entends que tu as une maitrise suffisante pour faire ce choix en connaissance de cause. Choix qui, dans le cas d'espèce, te semble a priori adapté.
 
Fatalement, il sera compréhensible à celui qui fera la maintenance, car une utilisation raisonnée de instanceof / getClass() ne nuira pas à la compréhension.
 
Il reste toujours les commentaires, que tu peux taper en abondance pour justifier et expliquer une implémentation particulière.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2004 à 13:53:56    

krosso a écrit :

Si vous avez le temps de nous mettre un petit exemple concret de ce DP pour le cas sus-cité...


je dis pas que c'est adapté à ce cas, mais ca donnerait en gros ca.
 
modifs à faire sur les objets existants :

Code :
  1. public interface FormeVisitor() {
  2.    public void visitingForme(Forme f);
  3.    public void visitingCarre(Carre c);
  4.    public void visitingRectangle(Rectangle r);
  5. }
  6. /** pour faciliter l'écriture des visitor */
  7. public interface FormeVisitorAdapter() {
  8.    public void visitingForme(Forme f) {}
  9.    public void visitingCarre(Carre c) {}
  10.    public void visitingRectangle(Rectangle r) {}
  11. }
  12. public class Forme {
  13.    //...
  14.    public void visit(FormeVisitor visitor) {
  15.       visitor.visitingForme(this);
  16.    }
  17. }
  18. public class Carre extends Forme {
  19.    //...
  20.    public void visit(FormeVisitor visitor) {
  21.       visitor.visitingCarre(this);
  22.    }
  23. }
  24. public class Rectangle extends Forme {
  25.    //...
  26.    public void visit(FormeVisitor visitor) {
  27.       visitor.visitingRectangle(this);
  28.    }
  29. }


 
utilisation :  

Code :
  1. public List<Carre> keepOnlyCarre(List<Forme> formeList) {
  2.       final List<Carre> carreList = new ArrayList<Carre>();
  3.       FormeVisitor visitor = new FormeVisitorAdapter() {
  4.          public void visitingCarre(Carre c) {
  5.             carreList.put(c);
  6.          }
  7.       }
  8.       for (Forme f : formeList) {
  9.           f.visit(visitor);
  10.       }
  11.       return carreList;
  12.    }


 
 
Le DP Visiteur est un peu lourd à mettre en place, et faut aire un effort pour s'y faire au début, mais dès qu'on est amené à souvent différencier le traitement en fonction du type de l'objet, il se révèle vite efficace !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 13:55:31    

kadreg a écrit :

On écrit pas du code pour soi, mais pour celui qui va le maintenir :o


justement, pour peu que le gars connaisse pas ce DP, il va en chier pour comprendre !! [:ddr555]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 13:56:36    

Honnetement, je crois que même pour la personne qui maintient le code, un petit instanceof ne gène pas du tout à la compréhension.
Le code et la technique sont une chose, le principe et le concept en sont une autre. Et pour ce qui est de la maintenance, c'est surtout la 2eme qui importe...


Message édité par maximew le 27-12-2004 à 14:08:19

---------------
Mon Flickr
Reply

Marsh Posté le 27-12-2004 à 13:58:12    

maximew a écrit :

Honnetement, je crois que même pour la personne qui maintient le code, un petit instanceof ne gène pas du tout à la compréhension.


 
Généralement, le instanceof  va poser problème bien plus tard, puisqu'on a une instance qui va suivre un chemin non prévu, et pas être traité.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 27-12-2004 à 14:07:24    

benou a écrit :

justement, pour peu que le gars connaisse pas ce DP, il va en chier pour comprendre !! [:ddr555]


Oui, enfin dans ce cas, ca n'excuse pas! Un analyste programmeur se doit d'à peu près tous les connaitre!


---------------
Mon Flickr
Reply

Marsh Posté le 27-12-2004 à 14:09:24    

mouahahah. si y'en a un sur 10 qui en a ne serait-ce qu'entendu parler, ca serait déja pas mal

Reply

Marsh Posté le 27-12-2004 à 14:13:15    

benou a écrit :

spamoi c'est nraynaud :o


pas du tout


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2004 à 15:47:06    

tout le monde s'en fout de mon exemple de Visiteur avec du jdk1.5 dedans [:ruisseau de larmes]
 


et c'est moi qui suis 1er degrès  :pfff:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 16:32:12    

ha, on peut insulter les autres gratuitement maintenant?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-12-2004 à 16:33:36    

the real moins moins a écrit :

ha, on peut insulter les autres gratuitement maintenant?


nan, faut payer, mais comme c'est moi qui récolte les sous ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 17:10:41    

benou a écrit :

tout le monde s'en fout de mon exemple de Visiteur avec du jdk1.5 dedans [:ruisseau de larmes]
 
 
et c'est moi qui suis 1er degrès  :pfff:


on a rien compris jcrois :D

Reply

Marsh Posté le 27-12-2004 à 17:17:22    

Glod 2 a écrit :

on a rien compris jcrois :D


en gros :  
* Un visiteur c'est un objet qui saura faire un certain traitement pour un certain nombre de types d'objets. (cf interface du visiteur)
* chacun de ces types d'objets doit être prévu pour être visité par ce visiteur (méthode visiting de chaque objet qui appelle la bonne méthode du visiteur)
* l'utilisation du DP visiteur consite à créer un Visiteur qui représente le traitement à effectuer pour chaque type d'objet, et à visiter le ou les objets concerné avec ce visiteur.
 
ca permet de faire un traitement spécifique en fonction du type de l'objet sans jamais avoir à tester le type de l'objet ...
 
edit : dans l'exemple j'ai créé un adapteur, mais c'est pas indispensable ...


Message édité par benou le 27-12-2004 à 17:18:34

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 18:07:18    

benou a écrit :

je dis pas que c'est adapté à ce cas, mais ca donnerait en gros ca.
 
modifs à faire sur les objets existants :

Code :
  1. public interface FormeVisitor() {
  2.    public void visitingForme(Forme f);
  3.    public void visitingCarre(Carre c);
  4.    public void visitingRectangle(Rectangle r);
  5. }
  6. /** pour faciliter l'écriture des visitor */
  7. public interface FormeVisitorAdapter() {
  8.    public void visitingForme(Forme f) {}
  9.    public void visitingCarre(Carre c) {}
  10.    public void visitingRectangle(Rectangle r) {}
  11. }
  12. public class Forme {
  13.    //...
  14.    public void visit(FormeVisitor visitor) {
  15.       visitor.visitingForme(this);
  16.    }
  17. }
  18. public class Carre extends Forme {
  19.    //...
  20.    public void visit(FormeVisitor visitor) {
  21.       visitor.visitingCarre(this);
  22.    }
  23. }
  24. public class Rectangle extends Forme {
  25.    //...
  26.    public void visit(FormeVisitor visitor) {
  27.       visitor.visitingRectangle(this);
  28.    }
  29. }


 
utilisation :  

Code :
  1. public List<Carre> keepOnlyCarre(List<Forme> formeList) {
  2.       final List<Carre> carreList = new ArrayList<Carre>();
  3.       FormeVisitor visitor = new FormeVisitorAdapter() {
  4.          public void visitingCarre(Carre c) {
  5.             carreList.put(c);
  6.          }
  7.       }
  8.       for (Forme f : formeList) {
  9.           f.visit(visitor);
  10.       }
  11.       return carreList;
  12.    }


 
 
Le DP Visiteur est un peu lourd à mettre en place, et faut aire un effort pour s'y faire au début, mais dès qu'on est amené à souvent différencier le traitement en fonction du type de l'objet, il se révèle vite efficace !


tu fumes ?
 
joquetino> tu vas en faire quoi de ta liste de carrés ?

Reply

Marsh Posté le 27-12-2004 à 18:39:52    

non. Tu peux préciser ta pensée ? [:itm]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 27-12-2004 à 21:30:50    

Je vois que mon pb déchaîne les passions .....
 
nraynaud>> la liste de carrés étais un exemple pour présenter mon problème, qui s'est résolu grâce à votre aide.
 
Par contre, un nouveau est apparu :
 
J'ai une JTable dans lequel j'ai insérer des éléments.
Les éléments en question sont des Integer.  
table est ma JTable.  
 
Integer p=(Integer) table.getModel().getValueAt(j,2);
System.out.println(p);
 
 
Or il me met : java.lang.ClassCastException
 
Pourquoi je ne peux faire ce cast?


Message édité par joquetino le 27-12-2004 à 21:32:01
Reply

Marsh Posté le 28-12-2004 à 00:57:27    

Je viens de m'aperçveoir de quelque chose.  
Cela me met une erreur que lorsque j'édite ma JTable.
Y a t-il quelque chose de particulier à déclarer dans ce cas?

Reply

Marsh Posté le 28-12-2004 à 01:19:30    

Bizarrement en faisant,  
Object p=res2.getModel().getValueAt(j,2);
System.out.println(p);
 
Il m'affiche bien un nombre dans la console.
Mais moi j'ai besoin de cette valeur pour l'enregistrer.
J'ai essayé de caster de cette façon,  
Integer po=(Integer) p;
 
Mais ça ne fonctionne tjrs pas.
 

Reply

Marsh Posté le 28-12-2004 à 01:20:20    

100 balles que c'est un String


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 01:29:16    

C'est en effet ça. 3 heures que je suis dessus.
Merci.

Reply

Marsh Posté le 28-12-2004 à 01:37:17    

[:joce]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-12-2004 à 01:56:02    

y a un truc genre issubclassof ?

Reply

Marsh Posté le 28-12-2004 à 09:23:15    

ben y'a instanceof

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed