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

C++ Discussion :

Partage de méthodes entre deux classe sans lien de parenté?


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Points : 122
    Points
    122
    Par défaut Partage de méthodes entre deux classe sans lien de parenté?
    Bonjour,

    J'ai une question toute bête :
    J'ai deux classes totalement indépendantes mais qui doivent utiliser la même méthode. Or ces deux classes n'ont pas de mère en commun..

    Comment faire pour ne pas avoir a reécrire deux fois la méthodes..

    Thanks

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Créer une 3eme classe qui implémente cette méthode
    Faire dériver ces 2 classes de cette classe de base

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Points : 122
    Points
    122
    Par défaut
    Merci

    En fait j'y avait dèja penser mais bon faire une classe pour une seule fonction. Je voulas en fait savoir si il y avait pas d'autre manière.MAis c'est ce que je ferai s'il y a vraiment rien d'autre..

    Encore merki

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par kuja2053 Voir le message
    En fait j'y avait dèja penser mais bon faire une classe pour une seule fonction.
    C'est moins pire que dupliquer du code ...

  5. #5
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    C'est quoi cette méthode que tu veux utiliser ? Une méthode de classe ou pas ?

    C'est censé représenter quoi ta conception?

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Cette fonction doit elle accéder à des données membres ?
    En fait, donne nous plus de détails sur ton contexte.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Comme dit Davidbrcz, il nous faudrait plus de détails, sinon l'héritage est pas forcement la meilleur solution, tu peux très bien faire une structure dans un autre fichier et mettre la methode en static.

    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
    // Fichier Tools.h
    struct Tools
    {
        static void foo();
    };
     
    // Fichier A.h
    class A
    {
        void m1()
        {
            Tools::foo();
        }
    };
     
    // Fichier B.h
    class B
    {
        void m2()
        {
            Tools::foo();
        }
    };
    (bien sur je te laisse faire les includes).

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Créer une 3eme classe qui implémente cette méthode
    Faire dériver ces 2 classes de cette classe de base
    Pas dériver. Composer. Sinon on ne respecte pas le principe de substitution de Liskov, ce qui peut entrainer un non respect du principe ouvert/fermé, ce qui est le signe d'une architecture qui, un jour ou l'autre, sombrera dans le chaos. L'héritage est réservé à la définition de sous-types, c'est à dire de types dont le comportement est identique de l'extérieur à celui du type parent. L'héritage de circonstance ne rentre pas dans cette catégorie.

    Citation Envoyé par leirbag Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Fichier Tools.h
    struct Tools
    {
        static void foo();
    };
    Ca, c'est du java.NET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace tools 
    {
      void foo();
    }
    Ca, c'est du C++

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    eheh sympa ta méthode
    Par contre c'est pas du Java.NET la mienne (en plus j'en ai jamais fait ), c'est une technique de levelisation que j'ai lu dans "Large Scale C++ : Software Design". Finalement les deux méthodes se rapproche assez, le but étant de mettre la méthode dans un endroit ou les 2 class peuvent acceder sans qu'il y ai une relation entre ces 2 class.

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Points : 122
    Points
    122
    Par défaut suite
    oula beaucoup de réponses...merci à tous...

    en fait c'est une méthode qui enlève les espaces avant et après dans un string car il y a de la saisie dans mon programme. Or j'en est besoin dans deux classes qui non aucune parenté. mais bon utiliser une "mini-classe" mère juste pour une fonction, je trouve ça un peu excessif. Surtout que la fonction, grâce à la classe <string> est assez courte à écrire. J'aurais put aussi dérivé cette même classe <string> mais bon pour ajouter une seule méthode!

    L'alternative avec les structures de "leirbag" et "Emmanuel Deloget"est une bonne solution pour éviter le copiage de code!!

    Donc c'est ce que je vais faire, je pense...

  11. #11
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Oui, dans ce cas, un namespace Tools est la bonne solution.

  12. #12
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Points : 122
    Points
    122
    Par défaut suite
    ok sujet résolu..

    Sympa le site "Why linux is better (fr)"

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par leirbag Voir le message
    eheh sympa ta méthode
    Par contre c'est pas du Java.NET la mienne (en plus j'en ai jamais fait ), c'est une technique de levelisation que j'ai lu dans "Large Scale C++ : Software Design". Finalement les deux méthodes se rapproche assez, le but étant de mettre la méthode dans un endroit ou les 2 class peuvent acceder sans qu'il y ai une relation entre ces 2 class.
    Tout à fait. Ceci dit, l'un crée une classe Tools, qui reçoit donc un constructeur, un constructeur par copie, un destructeur. Cette classe peut être instanciée, mais elle ne représente aucun concept, aucune abstraction. Son intérêt est donc assez minime. C'est cependant la seule manière de créer des "fonctions libres" en Java ou en C#.

    L'autre définit simplement une fonction - un algorithme, en fait - qui peut être réutilisé dans d'autres modules. Cette approche est consistante avec l'approche de la librairie standard (cf <algorithm>, <functional>, etc.)

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

Discussions similaires

  1. modéliser un appel de méthode entre deux classe en UML
    Par Sfaxiano dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 22/03/2010, 18h26
  2. Association entre deux classes (partager les methodes)
    Par shaiton dans le forum Débuter
    Réponses: 3
    Dernier message: 18/02/2009, 17h21
  3. Lien entre deux classe
    Par Bouboukick dans le forum Général Java
    Réponses: 19
    Dernier message: 27/05/2008, 11h09
  4. Partage d'une Textbox entre deux class
    Par lexius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/04/2008, 16h02

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