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 :

conception entrées/sorties élégantes et solides


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut conception entrées/sorties élégantes et solides
    Salut,

    J'ai une petite question de conception, j'aimerais savoir ce qu'il est coutume de faire.

    J'écris un programme (console) qui est constitué de l'interaction de plusieurs objets, les uns avec les autres (comme tout le monde quoi).

    Les paramètres utilisateur visant à initialiser le programme sont contenus dans une fichier d'input "input.txt", c'est un fichier ascii, mais peu importe...

    Les paramètres contenus dans ce fichier d'input concernent différents objets dans le programme...

    Perso je serais tenté de coder une classe qui fasse l'interface d'entrée de mon programme et dont une instance va lire et stocker les paramètres entrés dans le fichier input. Cette instance serait ensuite passée en paramètre des constructeurs des différents objets du programme, qui iront piocher, via les accesseurs, les paramètres qui les concernent.

    Ca me semble bien car en faisant ça, je sépare bien la vie de mes objets, de ce qui fait l'interface d'entrée de mon programme.

    Néanmoins, il y a une inélégance dans ce truc, liée à la redondance de certaines variables... qui sont à la fois des membres de ma classe d'input, et des membres de mes divers objets.

    Est-ce qu'il y a une façon de faire qui soit reconnue ?


    Merci
    --
    Heimdall

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Ne serait-ce pas d'un DP Builder dont tu as besoin ?

    Autre chose, pour t'éviter l'écriture laborieuse d'un parser de fichier de config, il y a Boost.Program Option.

  3. #3
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut
    Vais voir la page wikipedia et je reviens... ça m'a l'air d'être un peu l'artillerie lourde comme méthode, du point de vue de mon petit projet :-)
    --
    Heimdall

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Meuh non ne t'en fais pas, ce n'est pas très lourd un design pattern.

    Ne t'en fais pas trop pour cette redondance là : tu peux créer tes objets (avec le pattern monteur comme suggéré par 3DArchi, par exemple) et détruire ensuite celui qui t'as permis de lire le fichier. De cette manière, le(s) monteur(s) n'aura(ont) pour durée de vie que l'initialisation du programme, ce qui est cohérent avec le rôle que tu veux lui donner.

    Je valide également Boost.ProgramOption qui est facile à utiliser et très pratique.
    Find me on github

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    sur ce sujet, moi j'ai opté pour une solution que j'ai appelé Registry (qui n'a -presque- rien à voir avec la base de registre de windows).
    3DArchi, le "DP builder" dont tu parles ne serait-ce pas plutôt le factory?
    Quant à boost, effectivement c'est l'artillerie lourde. C'est un peu abusé de se taper boost juste pour ça (je n'aime pas trop boost de toutes façons. Je l'utilise pourtant dans presque tous mes projets, mais quand je peux, je m'en passe avec soulagement).

    Mon histoire de Registry fonctionne comme suit:
    C'est une simple map<string,string> (id/key), qui est encapsulée dans une classe Registry (dans mon cas c'est un singleton. Je suis un peu atteint de singletonite, mais dans ce cas là je pense que c'est vraiment ce qu'il y a de mieux). Cette classe Registry fournit une fonction qui lit le fichier de config (bon en vérité, dans ma lib c'est une classe à part mais peu importe) et des accesseurs templates qui permettent de récupérer les variables directement dans le type souhaité.

    Les sources sont dispos sur mon dépôt sourceforge, si ça t'intéresse:
    registry.h
    registry.cpp
    Note: l'acces aux variables de cette classe Registry est particulièrement coûteuse, surtout si on ne les récupère pas sous forme de string. Il faut donc l'utiliser de bon aloi (spéciale dédicace).

    Ensuite, pour la création des objets qui utilisent ces variables, cela va dépendre de chaque objet. Il n'est certainement pas nécessaire, par exemple, d'implémenter une factory à chaque fois.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par r0d Voir le message
    Quant à boost, effectivement c'est l'artillerie lourde. C'est un peu abusé de se taper boost juste pour ça
    Je ne suis pas trop d'accord. Passé l'étape d'installation et de link de boost la première fois qu'on s'en sert, ça se fait tout seul par la suite... Boost.Program_Option m'a fait gagner des heures de boulot par le passé.
    Find me on github

  7. #7
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    jblecanard, je te répond ici
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par r0d Voir le message
    3DArchi, le "DP builder" dont tu parles ne serait-ce pas plutôt le factory?
    Il s'agit bien du DP Builder (ou Monteur) dont l'objectif est bien de masquer la construction d'un objet complexe. Cela peut être le cas au démarrage où un builder spécifique peut s'appuyer sur les fichiers de configuration/initialisation/arguments en ligne de cmd pour construire les objets de l'application.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2006, 11h41
  2. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  3. Débutant - Entrée/Sortie
    Par seigneur.viggen dans le forum Langage
    Réponses: 11
    Dernier message: 28/09/2005, 15h47
  4. Copie entrée-sortie
    Par Troell dans le forum C
    Réponses: 18
    Dernier message: 24/09/2005, 19h11
  5. Réponses: 11
    Dernier message: 13/10/2004, 00h58

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