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 :

Communication Inter Objet


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut Communication Inter Objet
    Bonjour, voila, je vous expose mon soucis :

    J'ai deux objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClassA(type toto)
    ClassB(type tata)
    J'instancie ces deux classes séparément dans une autre classe : ClassInterface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ClassA A = new ClassA(monToto);
    ClassB B = new ClassB(maTata);

    Voila, maintenant, je veux pouvoir récupérer le paramètre de ma ClassA (à savoir monToto) directement dans ma ClassB pour le traiter...

    Je précise que je ne peux pas instancier ni l'une ni l'autre classes A ou B dans leur classes respectives car totalement indépendants...

    Effectivement, je pourrais aussi utiliser un controleur centrale que j'instancierai dans ClassInterface, mais je tiens particulièrement à instancier ces deux classes "séparément" dans mon Interface.

    Enfin, je veux aussi pouvoir traiter plusieurs instanciation de la classA (à savoir plusieurs paramètres monToto dans une seule (voir plusieurs) instanciation classB)

    Si vous avez une soluce avec le Designs Patterns qui va avec, je vous en remercierai bien

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    C'est pas très très clair !
    Peut-être qu'avec du vrai code qui compile vraiment, et en indiquant ce que tu voudrais faire sans y parvenir, ça le serait plus ?

    MAT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Mat007
    Salut,

    C'est pas très très clair !
    Peut-être qu'avec du vrai code qui compile vraiment, et en indiquant ce que tu voudrais faire sans y parvenir, ça le serait plus ?

    MAT.
    ok je raccourcis le code car il est un peu compliqué (c'est des widget goo...) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    public class objA
    {
        private Widget widgA
     
        public objA(Widget w)
        {
          this.widgA=w;
        }
     
        public void traiterWidgetB()
        {
           //C'est là que je veux traiter le WidgetB (ou collection)
        }
    }
     
    public class objB
    {
        private Widget widgB
     
        public objB(Widget w)
        {
          this.widgB=w;
        }
     
        public void traiterWidgetA()
        {
           //C'est là que je veux traiter le WidgetA (ou collection)
        }
    }
     
     
    public class monInterface
    {
        public monInterface()
        {
           Widget wid1 = new Widget()
           Widget wid2 = new Widget()
           Widget wid3 = new Widget()
     
           objA A1 = new objA(wid1)
           objA A2 = new objA(wid2)
           objB B = new objB(wid3)
     
           // Ici, comprenez que je ne veux justement pas de paramètre !
           A2.traiterWidgetB()
           B.traiterWidgetA()
        }
    }

    Le but du jeu est de ne pas toucher à la classe monInterface

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Re,

    Voilà le premier truc qui me vienne à l'esprit :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    public class objA
    {
        private Widget widgA
        private static final List widgets = new ArrayList();
     
        public List getWidgets()
        {
          return widgets;
        }
     
        public objA(Widget w)
        {
          this.widgA=w;
          widgets.add( w );
        }
     
        public void traiterWidgetB()
        {
          List widgetsB = objB.getWidgets();
           //C'est là que je veux traiter le WidgetB (ou collection)
        }
    }
     
    public class objB
    {
        private Widget widgB
        private static final List widgets = new ArrayList();
     
        public List getWidgets()
        {
          return widgets;
        }
     
        public objB(Widget w)
        {
          this.widgB=w;
          widgets.add( w );
        }
     
        public void traiterWidgetA()
        {
          List widgetsA = objA.getWidgets();
           //C'est là que je veux traiter le WidgetA (ou collection)
        }
    }
    Cela dit je tiens à signaler que personnellement je m'arrangerai vraiment pour pouvoir faire autrement
    Est-ce que tu es vraiment sûr que tu as besoin d'une telle construction ? Ne vaut-il pas mieux prendre un peu de recul et revoir le design général ?

    MAT.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Mat007
    Re,

    Voilà le premier truc qui me vienne à l'esprit :


    Cela dit je tiens à signaler que personnellement je m'arrangerai vraiment pour pouvoir faire autrement
    Est-ce que tu es vraiment sûr que tu as besoin d'une telle construction ? Ne vaut-il pas mieux prendre un peu de recul et revoir le design général ?

    MAT.
    bah sisi, je veux bien, mais je vois pas trop comment peut on faire...

    En faite, j'explique mon projet, je dois faire un Drag And Drop pour Google Web tool Kit...

    En faite, pour les cas d'utilisation, j'en ai 3 : onDrag (objA), onMove (invisible) et onDrop (objB) ; derrière on alimente ces différents cas avec différentes possibilités : selectionner seulement les images et les label pour dropper, ajouter une bordure, agrandire l'élément au Drag, ou encore bloquer un élément dans un conteneur onMove, etc...

    Bref, l'utilisateur instancie dans son Interface une classe Drop (élément à bouger) et Drag (élément récepteur)...

    Voila si tu peux me donne une c'tite piste pour le design ? (et si tu trouves le nom d'un desin pattern que je pourrais appliquer)

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Je ne connais pas du tout Google Web tool Kit, les primitives fournies pour gérer le drag&drop sont celles que tu donnes ?
    Genre tu enregistres un objet qui implémente une interface avec onDrag( objFrom ), onMove() et onDrop( objTo ) pour recevoir les événements ?
    C'est pas plutôt cet objet qu'il faudrait travailler pour parvenir à faire ce que tu veux ?
    Là comme ça, sans plus d'informations, je verrai bien un pattern 'state', mais autant j'ai rien compris et c'est pas du tout ça

    MAT.

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void traiterWidgetA(Widget widgetA) {
        //...
    }
    ne conviendrait pas?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    @Rom
    Nop, en faite, l'utilisateur ne devrait même pas avoir à saisir la fonction traiterWidget(), elle devrait même être totalement invisible côté utilisateur...

    Le truc par exemple, c'est de défnir des types d'objet sur le conteneur (c'est lui qui recoit l'élément qui bouge)

    Exemple :

    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
    //Element que l'on veut bouger
    Image monImage = new Image("leChemin.jpg");
    Label monLabel = new Label("Nom du Label");
     
    //On applique ici la possibilité de les bouger
    Drag myDrag1 = new Drag(monImage);
    Drag myDrag2 = new Drag(monLabel);
     
    //Receptacle qui va accueillir les éléments qui bouges
    Panel monPanneau = new Panel()
     
    //On défnit la possibilité de contenir des éléments
    Drop myDrop = new Drop(monPanneau)
    //Les éléments stocké ne peuvent être que des images, les autres sont rejeté
    myDrop.SelectType(Image)
    En l'occurrence, "monPanneau", le conteneur, doit pouvoir repérer quel est le type de Widget qu'il reçoit (en autre soit "monImage" qu'il accepte, soit "monLabel" qu'il rejette)






    Citation Envoyé par Mat007
    Je ne connais pas du tout Google Web tool Kit, les primitives fournies pour gérer le drag&drop sont celles que tu donnes ?
    Je viens de donner un nouvelle exemple plus concret

    Citation Envoyé par Mat007
    Genre tu enregistres un objet qui implémente une interface avec onDrag( objFrom ), onMove() et onDrop( objTo ) pour recevoir les événements ?
    C'est pas plutôt cet objet qu'il faudrait travailler pour parvenir à faire ce que tu veux ?
    Non, en instanciant les objets Drag et Drop, on va appelé des EventListener (à savoir : onMouseDown, onMouseMove et onMouseUp)
    Je veux séparer proprement les tâches, et les méthodes qui sont propres aux drag et au drop (avec un seul objet, on mélange tout..., et on ne pourra pas appliquer les méthodes du drag au drop par exemple)

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    //On défnit la possibilité de contenir des éléments
    Drop myDrop = new Drop(monPanneau)
    //Les éléments stocké ne peuvent être que des images, les autres sont rejeté
    myDrop.SelectType(Image)
    Dans ce cas, tu fais une classe Drop générique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Drop<Image> myDrop = new Drop<Image>(monPanneau);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Drop<W extends Widget> { ... }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par ®om
    Dans ce cas, tu fais une classe Drop générique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Drop<Image> myDrop = new Drop<Image>(monPanneau);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Drop<W extends Widget> { ... }

    y'a pas plus simple ? meme s'il faut revoir 2-3 choses... ?

  11. #11
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Alexino2
    y'a pas plus simple ? meme s'il faut revoir 2-3 choses... ?
    Citation Envoyé par Alexino2
    En l'occurrence, "monPanneau", le conteneur, doit pouvoir repérer quel est le type de Widget qu'il reçoit
    Bah, c'est à ça que servent les generics, ça permet de vérifier à la compilation que ton Drop va bien utiliser les bons types...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par ®om
    Bah, c'est à ça que servent les generics, ça permet de vérifier à la compilation que ton Drop va bien utiliser les bons types...
    oui mais là ca ne résoud toujours pas mon problème de communication... "monPanneau" ne sais toujours pas qui sont "monImage" et "monLabel", et ne peut donc récupérer leur propriété. Et ca complique quelques peu le code pour l'utilisateur...

  13. #13
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Alexino2
    oui mais là ca ne résoud toujours pas mon problème de communication... "monPanneau" ne sais toujours pas qui sont "monImage" et "monLabel", et ne peut donc récupérer leur propriété. Et ca complique quelques peu le code pour l'utilisateur...
    J'ai pas compris ce que tu voulais faire alors...
    Pourquoi ne passes-tu pas monLabel ou monPanneau en 2e argument du constructeur?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par ®om
    J'ai pas compris ce que tu voulais faire alors...
    Pourquoi ne passes-tu pas monLabel ou monPanneau en 2e argument du constructeur?
    Parce qu'il peut y avoir 10 monLabel... comme il peut y avoir 10 monPanneau...

    En gros, pour résumé, je veux pouvoir récupérer les propriétés de deux objets (instanciation illimité de ceux ci dans monInterface) et je veux pouvoir traiter ces objets, mais de manière automatique, et en dehors de monInterface (sans avoir à les relier dedans justement... Mais en passant par une méthode ou une autre classe...)

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bon bah, je pense avoir résolu le problème, me suis bien cassé la tête, et c'est domage que personne n'y est pensé...

    En faite, j'implémente une interface sur mes classe "drag" et "drop" (appelons là Mother...

    Ensuite, je créé une classe collectionMother, qui utilise un singleton pour s'instancier et une arrayList qui se charge de pointer vers Mother...

    Il ne reste plus qu'a utiliser le singleton dans le constructeur des mes classes drag et drop, et ainsi, il n'effectue qu'une seul instance de la classe "MotherCollection" et peuvent s'échanger facilement les infos...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/02/2014, 16h22
  2. Vos communications inter-objets et/ou threads
    Par peter27x dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2008, 12h13
  3. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 10h55
  4. Synchronisation inter objet (du fils vers le père)
    Par Yellowmat dans le forum MFC
    Réponses: 2
    Dernier message: 13/04/2005, 12h19
  5. [MFC] communication inter exe
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 17h47

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