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 :

[Héritage] Modification d'héritage : design pattern strategy


Sujet :

C++

  1. #1
    Membre régulier Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 87
    Points
    87
    Par défaut [Héritage] Modification d'héritage : design pattern strategy
    Après quelques recherches infructueuses sur le forum,
    je me décide à poster mon problème :

    comme le dis le titre je cherche à modifier un héritage en cours de travail...

    Supposons trois classes simplifiées qui imagent mon problème:
    Le boulot : Prendre en charge un fichier pour l'ajouter ses infos dans une Base.

    Une classe mère qui s'occupe de gérer les connexions à la base et la lecture ligne par ligne du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Mere{
    Connection * MysqlConnect;
    fstream fs_FileData
     
    virtual bool maRequete =0;
    }
    Deux filles qui héritent de Mère et qui permettent de prendre en charge deux types différents de fichiers (différenciés par leur extension)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class FilleA{
      virtual bool maRequete{
        /*une requete*/
      }
    }
     
    class FilleB{
      virtual bool maRequete{
        /*une requete différente*/
      }
    }
    Voilà le but recherché :
    Je cherche à mettre en place une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool NewFile(NouveauFichier); //Permet la prise en charge d'un nouveau fichier
    dans la classe Mère.
    Celle-ci doit permettre de modifier flot sur le fichier (ça c'est simple)
    mais j'aimerai également pouvoir prendre en charge un autre type de fichier.

    Ce qui veut dire passer de FilleA à FilleB sans perdre la mère,
    et surtout sans perdre la connection à la base de donnée !!

    Je pensais modifier l'héritage sans pour autant détruire et recréer l'objet
    Mais je ne sait pas du tout si c'est possible

    Si quelqu'un à pas compris faut taper
    et si quelqu'un a une meilleure définition pour le titre ca permettra d'aider les Rechercheurs

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Peut être le design pattern strategy ?

    Par exemple, une implémentation possible serait :
    Une classe Mere contenant un pointeur sur un LecteurDeFichier.
    Une classe abstraite LecteurDeFichier, dérivé en FilleA et FilleB
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre habitué
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Points : 161
    Points
    161
    Par défaut
    Il n'y a que des méthodes virtuelles pures redéfinies dans les filles ?? Alors il suffit de modifier la VTable, un transtypage (cast) devrais faire l'affaire (par contre j'ai plus la syntaxe en tête).

    Du joli N'objet ça serais d'avoir dans les filles des constructeurs type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FilleX::FilleX(Mere& mere, string newFile="");
     
    [...]
     
    FilleB filleb(fillea, "/home/file.new");
    [Pas garanti sans syntax error, c'est pour l'idée]. Tu récupère les infos de la mère (comme le Connection*, sans soucis), puis tu initialise les nouveaux champs avec les arguments complémentaires.

    Et au pire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    filleB->setConnection( filleA->getConnection() );
    PS : bien vu Loïc !
    Gaïa n'est pas une marchandise.

  4. #4
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    je suis d'accord avec Loïc, le plus propre consisterait à séparer la responsabilité de la connexion à la base de la responsabilité de la lecture de fichier, chacun son rôle :
    http://www.dofactory.com/Patterns/PatternStrategy.aspx

  5. #5
    Membre régulier Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 87
    Points
    87
    Par défaut
    merci pour le lien
    ça m'a l'air parfait, le schéma est très clair.

    merci !

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

Discussions similaires

  1. Design pattern : Strategie
    Par dsr57 dans le forum WinDev
    Réponses: 0
    Dernier message: 11/11/2014, 21h23
  2. Réponses: 21
    Dernier message: 30/06/2011, 11h10

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