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 :

Objets de différents types comme paramètre d'une fonction


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut Objets de différents types comme paramètre d'une fonction
    Bonjour,

    Est ce que c'est possible d'avoir quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void afficher(Object o)
    {
         o.afficher();
    }
    Comme ca je pourrais passer en paramètre une instance d'un ensemble de classes qui contiennent une méthode "afficher".

    Merci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par helpcomm Voir le message
    Comme ca je pourrais passer en paramètre une instance d'un ensemble de classes qui contiennent une méthode "afficher".
    Euh j'ai pas saisis le but là. Peux tu donner un exemple, ça rendra peut être les choses plus claires.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    Salut,
    Supposons, j'ai 4 classes C1, C2, C3, C4.
    Chacune de ces classes a une méthode qui porte le nom "afficher":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class C1 {
     
        void afficher()
        {
            System.out.println("Message de C1");
        }
    }
    Ici j'ai mis un code simpliste pour la classe C1. Pour les autres classes on va imaginer qu'elles affichent de la même manière "Message de Ci" où i et le numéro de la classe.

    Donc ma question est: est ce que c'est possible en Java (qui est un langage typé) de trouver une manière d'avoir quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void afficher(Object o)
    {
         //traitements peu importe le type de l'objet
         .
         .
         .
         o.afficher()
         //traitements peu importe le type de l'objet
         .
         .
         .
    }
    Si celà est possible, on serait en mesure de faire ceci

    afficher(ci);

    où ci est une instance de la classe Ci avec i numéro de la classe.

    L'intérêt de celà est évident si on imagine que la méthode que nous avons appelé "afficher" dans chaque classe pourrait avoir des traitement différents d'une classe à l'autre mais on peut l'appeler de la même facon. Parce que sinon on serait obligé d'avoir 4 fonctions où les traitements sont les mêmes à part une seule ligne.

    Merci

  4. #4
    Membre actif Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Points : 201
    Points
    201
    Par défaut
    la classe Object() en java n'a pas de methode afficher() donc tu auras une erreur de compilation.
    Tu peux créer une classe abstraite C qui a une méthode afficher() et tes classes Ci qui étendent C apres tu peux ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void afficher(C c){
    c.afficher();
    }
    On peut tout faire seul avec de la persévérance mais ça va plus vite à plusieurs.

    Je ne répondrais pas aux questions technique par MP .

  5. #5
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    En principe, ça passe plutot par un interface : tu définis un interface "Affichable" qui possède une méthode "afficher".

    Ensuite quand tu veux qu'un objet soit affichable, tu dis "implements Affichable", tu définis "afficher", et c'est fait.
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par akrom Voir le message
    la classe Object() en java n'a pas de methode afficher() donc tu auras une erreur de compilation.
    Tu peux créer une classe abstraite C qui a une méthode afficher() et tes classes Ci qui étendent C
    Pas mieux, il te faut créer un point commun entre ces classes pour qu'elles aient un type commun (puisque Object n'aura pas de méthode afficher()) donc qu'elles implémentent une interface commune C ou qu'elles étendent une classe abstraite C.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Salut,

    La proposition d'Akrom me semble plus viable. Tu peux essayer ce qu'il t'a dit.

    Cordialement.

  8. #8
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    mais non, c'est le cas typique où on utilise un interface...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  9. #9
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par misterKool Voir le message
    La proposition d'Akrom me semble plus viable. Tu peux essayer ce qu'il t'a dit.
    Citation Envoyé par BenWillard
    mais non, c'est le cas typique où on utilise un interface...
    Utilise une interface si la seule chose que tu veux est un type commun. Si tu veux embarquer du code commun à tout les objets, utilise une classe abstraite.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

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

Discussions similaires

  1. GetDate comme paramètre d'une fonction
    Par Zabriskir dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/12/2007, 12h14
  2. Type de paramètre dans une fonction
    Par preempalver dans le forum Flash
    Réponses: 1
    Dernier message: 22/11/2007, 14h06
  3. Passage d'une variable comme paramètre d'une fonction
    Par lowman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2007, 15h12
  4. Passer une matrice comme paramètre d'une fonction
    Par Rniamo dans le forum Langage
    Réponses: 8
    Dernier message: 16/07/2006, 20h55
  5. fonction comme paramètre d'une fonction
    Par velociraptor5679 dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2006, 18h19

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