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 :

Externaliser les méthodes d'une classe


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Externaliser les méthodes d'une classe
    Bonjour à tous

    L'externalisation de méthodes / fonctions est un problème récurant chez moi et je l'évite toujours d'une façon ou d'une autre. Là, j'ai fait un programme de test qui fonctionne bien et plutôt que de faire des copier/coller, je veux faire l'effort d'externaliser ces méthodes. Bien sûr, je n'y arrive pas, alors je me tourne vers vous.

    Le principe de ce que j'ai actuellement est le suivant :

    Mon programme main appel MainWindow. Jusque là tout est normal.

    MainWindow affiche des icones, selon le principe d'appel à une fonction, comme cela :

    Code Qt : 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
     
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
      ...
        QString code("ABCDE");
     
        //Icone Fix
        QPixmap *fixIcone = new QPixmap;
        *fixIcone = wayPoint(code);
        QLabel *labelFix = new QLabel(widget);
        labelFix->setPixmap(*fixIcone);
        vLayout->addWidget(labelFix);
     
    ...
    QPixmap MainWindow::wayPoint(QString code)
    {
        Dessin de l'icone
    ...
        return *pixmap;
     
    }

    Je souhaite donc externaliser les méthodes de dessin (ici wayPoint) tout en recevant en retour l'objet Qpixmap qui m'est nécessaire.

    Pour ce faire je crée une nouvelle classe et y colle mes méthodes. Je pense qu'il faut un constructeur, mais je n'en suis pas sûr. Ces méthodes peuvent-elles être accessibles en directe ? Dans tous les cas, je ne sais plus les appeler dès qu'elles sont externaliser, et je ne sais pas comment transformer l'appel de la fonction dans mainWindow ici :

    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       QPixmap *fixIcone = new QPixmap;
        *fixIcone = wayPoint(code);

    Mais peut-être que je fais fausse route dans mon raisonnement et qu'il faut un autre outil (biblio par ex) pour atteindre le résultat souhaité.

    Sauriez-vous m'aider sur ce problème ? Merci par avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Je souhaite donc externaliser les méthodes de dessin (ici wayPoint) tout en recevant en retour l'objet Qpixmap qui m'est nécessaire.
    Pourquoi ?
    C'est en sachant POURQUOI vous voulez externaliser qu'on pourra vous donner la bonne réponse.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Pourquoi ?

    1) Car ces méthodes sont susceptibles d'être utilisées par plusieurs applications, donc il me semble cohérent de ne devoir écrire/maintenir qu'une seule version de ce travail.

    2) A titre de formation car cette question est récurrente et qu'il me faut enfin réussir à comprendre quand, pourquoi et comment on doit/peut le faire.

    PS : j'ai trouvé la solution qui consiste, dans le cas présent, à passer par des méthodes statiques. Encore une étape franchie. Bonne continuation.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Ok, alors vous vous y prenez peut-être mal.

    Si vous voulez faire de la POO, avec des classes, vous ne devriez pas raisonner en terme de méthode "à externaliser".
    Il faut qu'une classe soit un tout cohérent.
    Vous devez donc concevoir la classe d'abord.
    Ensuite, révisez le code existant pour qu'il utilise les services de cette nouvelle classe plutôt que son implémentation actuelle.
    Comme vous avez conçu votre classe comme un tout cohérent, et le plus indépendant du reste, il sera facile d'utiliser cette classe dans un autre projet.

    Après, si la fonctionnalité de la méthode à "exporter" n'a pas vocation à faire partie d'un tout cohérent, rien ne vous empêche dans faire une fonction libre.
    Mais attention, comme une classe, une fonction libre doit être indépendant de tout le reste, vous devez donc lui fournir en paramètre tout ce dont elle a besoin pour faire son œuvre.

    Donc, comme je n'ai pas de contexte, on va prendre l'option "fonction libre" :

    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QPixmap generatePixmapFromString(const QString& code)
    {
       QPixmap result;
    ...
       return result;
    }
    Et on laisse le RVO faire son boulot.
    Après, pour l'appel, comme c'est une fonction libre, cela s'appelle de la même manière qu'une méthode de l'instance.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Externaliser / factoriser des fonctions c'est pratique, on a tous une lib Utils avec ce genre de trucs.
    Mais comme le dit Bacelar dans ton cas une vraie classe qui gère ça est surement la bienvenue et une meilleure idée.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci pour vos points de vue.

    Je vais donc travailler en ce sens.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/09/2010, 17h30
  2. Réponses: 2
    Dernier message: 15/09/2009, 16h55
  3. Surcharger les méthodes d'une class mère
    Par Djobird dans le forum Langage
    Réponses: 8
    Dernier message: 06/06/2008, 16h54
  4. Déclarer les méthodes d'une classe
    Par bandit_debutant dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2007, 13h43
  5. [Système] Problème avec les méthodes d'une classe
    Par oussama127 dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2006, 09h18

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