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

Java Discussion :

[DP][héritage]sous-casting dynamique


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Points : 102
    Points
    102
    Par défaut [DP][héritage]sous-casting dynamique
    Bonjour,

    J'aimerais savoir s'il est possible de sous-caster un objet autrement qu'en codant en dur le sous-castage, càd que j'aimerais éviter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C obj;
    if(A.class.isInstance(obj) {
    methode((A)obj);
    }
    Je préfèrerais récupérer dynamiquement le type de obj qui m'intéresse (via une méthode quelconque ce cette classe) et le sous caster avec ce type. J'espère que je suis assez compréhensible

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Caster de façon dynamique une class est impossible, où alors je ne connais pas la méthode... mais pourtant j'ai cherché... Donc il te faut une autre solution...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Points : 102
    Points
    102
    Par défaut
    Oki, merci. Du coup, autre question (toujours dans le même style) :

    Pour être plus précis je manipule des objets de type ElectornicElement (qui est une interface). Cette interface est étendue par trois classes :
    - une classe Connection.
    - une classe Junction.
    - une classe ElectronicComponent (abstraite). Cette dernière est étendue par une multitude de composants mais le type qui m'intéresse est bien ElectronicComponent.

    Alors voilà ce à quoi j'ai pensé, mais ça m'a l'air très sale :
    Je crée une méthode dans la classe ElectronicComponent qui me retourne forcément un ElectronicComponent.class, quel que soit le type de composant (un peu façon getClass, mais je veux pas la classe d'implémentation), pour Junction et Connection getClass fera l'affaire.

    Ensuite je fais une HashMap dont les clés sont les objets class, et les valeurs des méthodes, ces méthodes se chargeant toutes seules de faire le sous-casting. La jour où je rajoute une classe implémentant ElectronicElement, il suffit de rajouter une entrée dans la HashMap. Le problème, c'est que je me demande si c'est pas encore plus laid que les tests pour déterminer la classe..... :

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 68
    Points : 72
    Points
    72
    Par défaut
    En général, ce genre de préocupations est un indice de situations douteuses qui peuvent être élégamment résolues par le pattern du visiteur. Je m'étonne de ne pas l'avoir trouvé à la page des design pattern de developpez.com, je suis persuadé l'y avoir déjà vu. Comme quoi, on se fait des idées...

    Bref, le principe de ce pattern et qu'il y a un deux objets qui se rencontrent et qui se font coucou !, mais comme ils sont pas pareils, alors ils se font pas coucou de la même manière... Je sais pas si je suis clair, alors allons-y pour le code...

    Soit une opération O qui dépend du type d'objet passé en paramètre. Tu ne veux pas faire le cast au niveau de l'appel de méthode, parce que tu trouves que c'est pas du tout élégant. Alors tu lui passes un objet relais, qui rappelle l'objet émetteur, en faisant le cast sans que personne ne s'en aperçoive... n'est-ce pas génial ??

    Soit l'objet qui fait l'opération :
    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
     
    public class A
    {
     ... quelque part :
      Visiteur a;
      a = ...;
      a.visitePourO(this);
    }
     
    // première possibilité d'opération O :
    void O(Classe1 x)
    {
     ...
    }
     
    // deuxième :
    void O(Classe2 y)
    {
     ...
    }
    Classe1 et Classe2 sont des héritiers de la classe Visiteur.

    Dans Classe1, par exemple, la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    public void visitePourO(A acteur)
    {
     acteur.O(this); // -> ici j'irai à la première opération ; si j'avais été dans Classe2, j'aurais été à la deuxième.
    }
    Pareil pour Classe2 et, bien sûr, la classe Visiteur.

    Suis-je clair ?? Vois-tu bien que le cast se fait sans aucun cast, ni downcast, ni souscast ???

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 85
    Points : 102
    Points
    102
    Par défaut
    Salut,

    Bon après examen du pattern visiteur, je pense que c'est tout à fait ce qu'il me faut, moyennant une ch'tite adaptation (dans mon cas, mes composants électroniques comportent tous les mêmes méthodes, donc j'ai pas besoin de plusieurs visiteurs, un seul suffira).

    Bon en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cast dynamique d'un objet ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 10h43
  2. [VB6] sous menu dynamique
    Par malhivertman1 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/03/2006, 14h13
  3. héritage et casting
    Par dinver dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2005, 23h23
  4. [URL] Sous domaines dynamiques.
    Par Nairolf7 dans le forum Hébergement
    Réponses: 2
    Dernier message: 17/05/2005, 10h08
  5. Créer un sous-menu dynamiquement
    Par PurL dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/09/2004, 10h31

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