IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

instanceof ou mauvais polymorphisme ? [Débat]


Sujet :

Langage Java

  1. #41
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Mais je n'ai jamais dit qu'il fallait appliqué le pattern visitor pour cet exemple...

    Ceci dit, je pense qu'il ne faudrait passer qu'un argument à la methode visit du Visitor, l'autre argument pourrait etre passer dans le constructeur du visitor.

  2. #42
    Membre du Club

    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Sujet très intéressant. Je sais pas si vous avez lu ces liens :

    http://accu.org/index.php/journals/496
    http://multijava.sourceforge.net/


    Bon courage !

    En tout cas, c'est certain que le pattern visitor ne peut rien faire dans votre cas.

  3. #43
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 15
    Points : 22
    Points
    22
    Par défaut une autre idée
    Une methode qui utilise la reflexion.

    Attention je sens qu'il y en a qui vont pas aimer.
    Moi non plus je ne suis pas trop satisfait il faut dire... Noament du au probleme d'heritage avec la method getMethod...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
     
     
    public abstract class Solid {
     
     
     
     
    	public boolean collision(Solid solid) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
    		Method method = null ;
     
    		try {
    			method = PEngine.class.getMethod("computeCollision", new Class[]{this.getClass(),solid.getClass()});
    			return ((Boolean)method.invoke(null, new Object[]{this,solid} )).booleanValue();
    		} catch (NoSuchMethodException e) {
    			method = PEngine.class.getMethod("computeCollision", new Class[]{solid.getClass(),this.getClass()});
    			return ((Boolean)method.invoke(null, new Object[]{solid,this} )).booleanValue();
    		}
     
    	}
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class PEngine {
     
     
    	  public static boolean computeCollision(SolidCircle circle1, SolidCircle circle2)
    	  {
    	    System.out.println("Collision Circle " + circle1 + " with Circle " + circle2);
    	    return true;
    	  }
     
    	  public static boolean computeCollision(SolidCircle circle, SolidRectangle rect)
    	  {
    	    System.out.println("Collision Circle " + circle + " with Rectangle " + rect);
    	    return true;
    	  }
     
    	  public static boolean computeCollision(SolidRectangle rect1, SolidRectangle rect2)
    	  {
    	    System.out.println("Collision Rectangle " + rect1 + " with Rectangle " + rect2);
    	    return true;
    	  }
     
    }

  4. #44
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par guams Voir le message
    Merci pour le lien, c'est tres instructif et j'en ai profité pour lire le lien sur le double dispatch dont je me suis inspiré pour adapter ton code en utilisant une interface:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    interface Collidable
    {
       boolean collideWith(Collidable aSolid);
     
      boolean collideWithSolidCircle(SolidCircle aSolid);
     
      boolean collideWithSolidRectangle(SolidRectangle aSolidRectangle);
    }
    J'ai pas suivi toute la discussion, mais je me dis que saupoudrer un peu de generics pourrait simplifier la chose.

    Par exemple on pourrait transformer ton interface en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    interface Collidable<S extends Solid> {
        boolean collideWith(Collidable aSolid);
        boolean collideWith(S aSolid);
    }
    Puis, il te suffirait par exemple pour ta classe SolidCircle de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class SolidCircle extends Solid implements Collidable<SolidCircle>,Collidable<SolidRectangle> {
    ...
    Ça éviterait comme disait bulbo de devoir modifier ton interface si tu ajoutais une classe dérivée de Solid.

    Bon, je dis ça, mais j'ai vraiment pas tout suivi

  5. #45
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par bobuse Voir le message
    J'ai pas suivi toute la discussion, mais je me dis que saupoudrer un peu de generics pourrait simplifier la chose.

    Par exemple on pourrait transformer ton interface en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    interface Collidable<S extends Solid> {
        boolean collideWith(Collidable aSolid);
        boolean collideWith(S aSolid);
    }
    Puis, il te suffirait par exemple pour ta classe SolidCircle de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class SolidCircle extends Solid implements Collidable<SolidCircle>,Collidable<SolidRectangle> {
    ...
    Ça éviterait comme disait bulbo de devoir modifier ton interface si tu ajoutais une classe dérivée de Solid.

    Bon, je dis ça, mais j'ai vraiment pas tout suivi
    Bonjour
    J'ai essayé ta solution que je trouvais assez surprenante mais celle ci ne compile pas. Avec Eclipse, voici le message que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The interface Collidable cannot be implemented more than once with different arguments: Collidable<SolidCircle> and Collidable<SolidRectangle>
    Est ce normal ? Ai je loupé un truc ?
    Thomas

  6. #46
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    Ha, ba peut-être que c'est pas possible. Zut

Discussions similaires

  1. instanceof c'est mauvais?
    Par pongping dans le forum Langage
    Réponses: 33
    Dernier message: 20/05/2007, 20h39
  2. Mauvais indicateur de connection
    Par calvin dans le forum Hibernate
    Réponses: 15
    Dernier message: 24/05/2004, 13h03
  3. [Tomcat][JSP] Mauvais fonctionnement
    Par gandalf_le_blanc dans le forum Tomcat et TomEE
    Réponses: 47
    Dernier message: 26/04/2004, 14h07
  4. Mauvais noms de colonnes lors d'une requête
    Par nmathon dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/04/2004, 08h27
  5. mauvais code
    Par moumou dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 17/04/2003, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo