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

avec Java Discussion :

Communication de deux classes via interface


Sujet :

avec Java

  1. #1
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut Communication de deux classes via interface
    Salut,

    Je me demande si deux modules (2 classes java) dans la même JVM peuvent communiquer via une interface java,

    Merci d'avance,

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonjour,

    Drôle de question.
    Je ne suis pas professionnel, mais les interfaces servent uniquement à définir un jeu de méthode vide en vue de les implémenter dans différentes classes devant répondre à un besoin commun.
    A l'issu, une classe qui implémente une interface s'approprie en quelque sorte la ou les méthodes décrites par cette dernières. Le développeur qui implémente une interface est en charge d'écrire le code a réaliser dans la méthode.
    Par exemple, les composant Swing de Java peuvent tous avoir besoin d'être informés des évènements de souris. Pour cette raison, l'API standard Java met a disposition des développeurs un ensemble d'interfaces d'écoutes d'évènements dédiés à la souris. Lorsque ces évènements surviennent, la JVM dispatchera l'évènement auprès de toutes les classes qui implémente l'interface MouseListener et qui ont été enregistrées comme écouteur auprès d'un composant "émetteur".
    Par contre, si ce sont deux programmes différents qui désirent communiquer ensemble, il faudra utiliser les sockets par exemples, ou bien des pipes.
    Enfin voilà...

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Les interfaces n'ont pas grand chose à voir avec la question. Un objet, dans la jvm, peux évidement appeler les méthodes d'un autre objet dans la même jvm, pour un peu qu'il aie une référence vers cet objet.

  4. #4
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Salut, et Merci pour vos réponse,

    en fait , je vais éclaircir un peu ma question ,

    J'ai deux modules indépendant développés en java , et je veux qu'ils communiquent d'une manière indépendante , en effet , je veux que mon "string" récupéré par le premier module passe au deuxième module ,

    j’espère que vous avez compris ma question,

    Bien cordialement,

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Pour ça, il doivent se connaitre (au moins dans un sens) et tu aura donc la classe instanceA du module A qui aura dans son code quelque part instanceBquonmafile.setValeurString(lanouvellevaleur).

    Il n'y a pas de magie

  6. #6
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Ok, mais qu'entendez-vous par module.
    Ces modules, c'est vous qui les avez créés ?
    Plus simplement, faisons abstraction du langage. Vous avez deux programmes qui fonctionnent indépendamment l'un de l'autre et vous aimeriez qu'ils échangent des informations entre eux sous forme de chaîne.
    Dans ce cas, je crois comprendre pourquoi vous parlez d'interface. En fait, vous pensiez créer une interface commune a ces deux applications. Ce n'est pas erroné comme réflexion, mais comme le résume très bien tchize_ les interfaces n'ont rien à voir avec cela. Dans votre cas, il s'agirait plutôt d'un dialogue "externe", donc comme je vous l'expliquait, seul des outils de dialogue "externe" vous permettrons cela. Les Sockets ou les Pipe. Encore faudra-t-il écrire les méthode au sein de vos classes pour mettre en œuvre et exploiter ces objets.
    J'espère avoir répondu à votre question. Quoi qu'il en soit, pour ma part, à moins que vous ayez du code à soumettre, je ne pourrai pas aller plus loin.

    Bon courage...

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 278
    Points : 13 564
    Points
    13 564
    Par défaut
    Bonjour

    Deux processus indépendants peuvent communiquer par sockets. (exécutés par la JVM ou non)

  8. #8
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    @tchize_
    @pursang
    @Flodelarab

    Merci bien pour ces réponses ,

    Bien cordialement ,

    ------
    ------

  9. #9
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Re-Salut ,

    J'ai un autre problème , Lorsque j'utilise la pipe dans la même classe le programme fonctionne correctement , mais dès que je connecte l'entrée déclarée dans la première classe au sortie déclarés dans le deuxième module , Je me trouve devant le trace suivant : "java.io.IOException: Pipe not connected" , et j'ai essayé d'utiliser la méthode "out.connect(maclasse.in)" ,
    Mais en vain , la même erreur s'affiche encore.

    Merci d'avance,

  10. #10
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    J'ai beaucoup de mal à vous suivre...
    Vous parlez de classes, de programmes, de modules ?!....
    Je n'arrive pas à comprendre si vous me parlez d'un seul programme, ou de deux programmes complètement différents ?

  11. #11
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 278
    Points : 13 564
    Points
    13 564
    Par défaut
    Citation Envoyé par Mednet Voir le message
    "java.io.IOException: Pipe not connected" , et j'ai essayé d'utiliser la méthode "out.connect(maclasse.in)" ,
    Mais en vain , la même erreur s'affiche encore.
    Normal. Un tube ne marche que s'il y a qqch en entrée et qqch en sortie.

    Si tu es sous linux, médite ces choses-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ mkfifo tube
    $ cat fichier.txt >tube
    ^C
    $ cat fichier. txt >tube &
    $ cat <tube 
    $ rm -f tube
    Le premier cat monopolise la console en attendant que l'autre côté du tube sois branché (ce qui n'arrivera pas). Obligé de faire Ctrl+c pour arrêter
    Le second cat ne fait rien à part mettre en arrière plan ce nouveau processus qui attend.
    Lors du troisième cat, tout s'active, le deuxième et le troisième cat s'exécutent.
    Par la suite, les deux processus s'arrêtent et le tube nommé est vide.

    mkfifo et rm -f fifo fabriquent et détruisent le tube nommé

  12. #12
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    En fait, deux programmes différents (ou deux classes différentes si vous préférez) sont deux entités qui n'évoluent pas dans le même espace mémoire. Par définition, dans ce cas, le programme qui évolue dans l'espace mémoire A ne peut pas accéder aux donnée contenues dans l'espace mémoire B du second programme. Si ces deux programmes ont un point commun (un lanceur par exemple), ce dernier peut leur fournir le 'tuyau' ou 'tube' qui leur permettra de communiquer entre eux 'en interne'.
    Si par contre ils n'ont aucuns point commun, ils sont lancés par leur propre classe main indépendamment l'un de l'autre, alors il ne reste plus que la solution 'externe'. Les Sockets par exemple comme l'a indiqué flodelarab. Avec une précision toutefois, si vos programmes évoluent sur la même machine, créez votre socket sur la boucle locale "127.0.0.1", cela évitera de polluer inutilement le réseau, ce qui arriverait si vous utilisiez votre socket en le connectant sur l'adresse IP xxx.xxx.xxx.xxx de votre machine.

  13. #13
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Merci bien pour votre interaction,

    @pursang :

    2 Modules = 2 classes différentes

    @All :

    En fait , j'ai entendu parler de l'implémentation d'une interface , en effet , il faut créer une interface et les deux classes doivent l’implémentée , mais A ce que je sais , une interface est une classe abstraite où raison d’être = "Héritage Multiple" ,

    merci

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 631
    Points
    21 631
    Par défaut
    Du coup, un peu comme avec l'expression appeler un chat un chat :
    Ce serait bien d'appeler deux classes deux classes. Logique.

    Citation Envoyé par Mednet
    J'ai un autre problème , Lorsque j'utilise la pipe dans la même classe le programme fonctionne correctement , mais dès que je connecte l'entrée déclarée dans la première classe au sortie déclarés dans le deuxième module , Je me trouve devant le trace suivant : "java.io.IOException: Pipe not connected" , et j'ai essayé d'utiliser la méthode "out.connect(maclasse.in)" ,
    Tu as sûrement fait une erreur. Par exemple tu essaies d'utiliser le pipe avant d'avoir connecté les deux bouts. Il faut montrer le code.

    Citation Envoyé par Mednet Voir le message
    En fait , j'ai entendu parler de l'implémentation d'une interface , en effet , il faut créer une interface et les deux classes doivent l’implémentée , mais A ce que je sais , une interface est une classe abstraite où raison d’être = "Héritage Multiple"
    Moui enfin, le pseudo-héritage multiple n'est qu'un des intérêts des interfaces.

    Et sinon... Ok, et alors ? Ça nous mène quelque part ?

  15. #15
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Merci pour votre réponse ,

    En fait , je vais essayé d’éclaircir un peu les choses ,

    Oublions les pipes ,

    Ma question est la suivante : Est-ce-que deux classes indépendantes peuvent communiquer en implémentant une interface ,

    Public interface communication{
    }
    public class envoi{
    }
    public class recept{
    }

    NB : Communication unidirectionnelle (une classe envoie , l'autre reçoit)

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Mettons A envoie vers B, tu crée une interface "Recipient" avec un méthode genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface Recipient{
      public void envoi(Truc truc);
    }
    B implémente cette interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class B implements Recipient{
       public void envoi(Truc truc){
          // faire quelque chose avec le truc reçu
       }
    }
    A doit connaitre le récipient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class A {
        private Recipient recipent;
        public void setRecipient(Recipient recipent){
            this.recipient = recipient;
        }
        public void trucmuch(){
           // .....
           recipient.envoi(untruc);
           // .....
        }
    }
    Et enfin faut tout lier


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A a = new A()
    B b = new B();
    a.setRecipient(b);
    a.trucmuch();

  17. #17
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réponses ,

    Finalement , j'ai arrivé à transmettre le fameux string ,

    Alors , passons au deuxième stade :

    Normalement , ma première classe est une classe qui hérite de la Classe Thread , donc je veux accéder a ce string pendant l'execution de ce thread,

    en effet , ce thread c'est lui qui renvoie les string , J'ai essayé de travailler avec les classes internes mais le 2ème programme me renvoie une valeur NULL,

    Any idea ?
    Thanks

  18. #18
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 278
    Points : 13 564
    Points
    13 564
    Par défaut
    Finalement , j'ai arrivé à transmettre le fameux string ,
    mais le 2ème programme me renvoie une valeur NULL,
    Ces deux phrases se contredisent.

    Qu'es-tu arrivé à faire exactement?


    Attention au vocabulaire. Une classe n'est pas un objet.
    Une classe est un type d'objet. Tu peux instancier des objets de cette classe. L'héritage concerne la description de la classe, pas la descriptions des objets. Pour qu'une classe ait une "string", il faut que la "string" soit définie static et alors elle est unique pour toute la classe (donc tous les objets qui en découlent)

  19. #19
    Membre du Club Avatar de Mednet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 53
    Points : 50
    Points
    50
    Par défaut
    Nop , y a pas de magie dans ce que je viens de dire ,

    en effet , j'ai arrivé à transmettre le string de la classe A vers B , Mais ces deux classes sont des classes simples c'est à dire ne sont pas multi-threaded ,

    Mais , lorsque je modifie la première classes ( extends thread) et je définie la méthode run() , la deuxième classe renvoie une valeur NULL ,

    J'espère que vous avez compris

  20. #20
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 278
    Points : 13 564
    Points
    13 564
    Par défaut
    "Je suis arrivé" est la forme correcte.

    je définie la méthode run()
    Si tu la redéfinis, c'est elle qui prévaut. appelles super.run() si tu veux que celle de la classe mère s'exécute.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/12/2010, 11h52
  2. Communication entre deux classes indépendantes
    Par hazem2410 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/12/2010, 21h12
  3. Communication entre deux classes
    Par Luigicube dans le forum C#
    Réponses: 12
    Dernier message: 04/12/2009, 17h46
  4. Réponses: 15
    Dernier message: 14/10/2009, 15h43
  5. communication de deux elements via des threads
    Par alexandre21130 dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/07/2004, 02h25

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