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 :

Question de factorisation


Sujet :

C++

  1. #1
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut Question de factorisation
    Bonjour à tous.

    Je post une question de conception mais assez lié au C++, ce qui me pousse à demander ici.

    Pour le moment j'ai 2 fonctions foo et foo2 qui appellent respectivement bar et bar2. Or justement la seul différence entre foo et foo2 c'est l'appel à bar.

    De plus la différence entre bar et ba2 est aussi très mince :
    en effet, bar et bar2 doivent vérifier des données mais pas de la même façon (bar et bar2 se résument à une série de test).

    Dès lors faut t'il mieux factoriser par foo et foo2 en faisant une seule fonction template avec comme paramètre un pointeur de fonction sur bar ou bar2 ou alors factoriser par bar avec un patern stratégie ?

    La 1er solution est la plus facile à mettre en oeuvre mais est ce la meilleure ?

    Merci.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  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 : 50
    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
    Par défaut
    Difficile de répondre dans l'abstrait, en dehors de tout contexte.

    S'il existe déjà une classe qui pourrait accepter le point de variabilité par une fonction virtuelle, (la classe représentant les données à vérifier, par exemple ?), j'y ajouterait probablement la fonction bar.

    Si les perfs comptent, ce qui n'a ap priori pas l'air d'être le cas ici, la solution à base de template peut être à coût nul.

    Si foo et bar sont des petits trucs en périphérie de l'appli, et que foo s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foo()
    {
      bur();
      bar();
      bir();
    }
    ou encore plus simplement, j'accepterais peut-être même la duplication comme étant meilleure qu'une solution plus sophistiquée, car plus simple tout en restant d'amplitude limitée.

    Utiliser le pattern strategy alors qu'on ne semble pas vouloir de variabilité runtime me semble un peu lourd.
    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
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Donc pour rendre mon problème un peu plus concret,
    foo et foo2 sont des fonctions recevant des données depuis un socket.
    Elle recoivent la même chose c'est juste que foo est la fonction appellée pour recevoir la 1er fois car le test effectué par bar est différent lors du reste de l'application.

    S'il existe déjà une classe qui pourrait accepter le point de variabilité par une fonction virtuelle, (la classe représentant les données à vérifier, par exemple ?), j'y ajouterait probablement la fonction bar.
    Nan les fonctions virtuelles, on oubli, car foo et foo2 font partie de la même classe et sont appelées à partir du même objet.

    Si les perfs comptent, ce qui n'a ap priori pas l'air d'être le cas ici, la solution à base de template peut être à coût nul.
    D'après ce que j'imagine, elle l'est.

    Utiliser le pattern strategy alors qu'on ne semble pas vouloir de variabilité runtime me semble un peu lourd.
    J'en prend note
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Pour le moment j'ai 2 fonctions foo et foo2 qui appellent respectivement bar et bar2. Or justement la seul différence entre foo et foo2 c'est l'appel à bar.

    De plus la différence entre bar et ba2 est aussi très mince :
    en effet, bar et bar2 doivent vérifier des données mais pas de la même façon (bar et bar2 se résument à une série de test).
    Peux-tu nous donner le prototype des fonctions ? Ce serait plus simple pour comprendre ton problème.

  5. #5
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Après une bonne nuit de someil, j'ai décidé de factoriser par foo et donc de passer par les templates.
    Ne reste plus qu'a trouver comment appeller une fonction template membre d'une classe.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  2. Divers questions
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 06/08/2002, 21h57
  3. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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