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 :

Namespace vs Structure


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut Namespace vs Structure
    Bonjour,

    J'ai une petite question qui concerne l'organisation d'un petit peu de code que je suis en train d'écrire.

    Je souhaite réaliser une fonction qui me permet d'obtenir un QPixmap (image) d'un code barre.
    Cette fonction doit pour des raisons de lisibilité se décomposer en un certain nombre de sous fonctions.

    Pour organiser ce genre de contenu il vaut mieux utiliser une structure avec uniquement des méthodes statiques ou plutôt un namespace et fonctions sachant que j'ai besoin de variables (const static) à l'extérieur des dites fonctions ?

  2. #2
    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

    Et pourquoi pas utiliser un objet (une classe), tout simplement ?
    Find me on github

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Cette question est d'ordre conceptuel/sémantique.

    As-tu déjà une classe qui représente un code barre ?
    Si non, cela ne serait-il pas une bonne idée ?

    Quelles devront être les entrées de ta fonction ?

    As-tu une bonne raison pour t'attacher autant à la nature statique des fonctions ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    Oui j'ai du mal m'expliquer, je cherche à générer "l'image" d'un code barre.
    L'objet (classe) code barre ne m'intéresse pas.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Si vraiment tu ne veux pas d'objet, considérant que dois utiliser des variables, va sur une classe statique. Encapsule un minimum, toutefois...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    classe statique ? (abstraite avec des méthodes statiques)

  7. #7
    screetch
    Invité(e)
    Par défaut
    je pense que c'est un bon design en fait et ca ressemblerait a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace CodeBarreHelper
    {
      static QPixmap* makeCodeBarre(...);
    }
    dans le CPP:
    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
    24
    25
    namespace CodeBarreHelper
    {
      namespace
      {
        const int maVariable;
        QPixmap* makeNewPixmap()
        {
          ...
        }
        void drawCodeBarre(QPixmap* p, ...)
        {
          ...
        }
        void doMoreStuff()
        {
          ...
        }
      }
      QPixmap* makeCodeBarre(...)
      {
        makeNewPixmap();
        drawCodeBarre();
        //blabla
      }
    }
    d'un point de vue général, je ne vois pas pourquoi on ferait une struct qui servirait seulement de namespace, dans ce cas on utilise un namespace.
    Et encapsuler, ca veut dire qu'on est pas obligé de tout mettre dans un fichier header si c'est privé. Une méthode peut etre dans un namespace non nommé et dans un fichier C++, et comme ca tu bénéficies de check supplémentaires du compilateur.

    bref, utilise struct quand tu veux une struct, class quand tu veux une classe, et namespace quand tu veux un namespace.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 96
    Points : 47
    Points
    47
    Par défaut
    Merci, c'était l'idée que j'avais à la base...
    Mais j'étais pas sur.

  9. #9
    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
    Citation Envoyé par screetch Voir le message
    je pense que c'est un bon design en fait et ca ressemblerait a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace CodeBarreHelper
    {
       static  QPixmap* makeCodeBarre(...);
    }
    Cette fonction a probablement vocation à être dans un .h et ne pas être statique.
    Citation Envoyé par screetch Voir le message
    d'un point de vue général, je ne vois pas pourquoi on ferait une struct qui servirait seulement de namespace, dans ce cas on utilise un namespace.
    Et encapsuler, ca veut dire qu'on est pas obligé de tout mettre dans un fichier header si c'est privé. Une méthode peut etre dans un namespace non nommé et dans un fichier C++, et comme ca tu bénéficies de check supplémentaires du compilateur.

    bref, utilise struct quand tu veux une struct, class quand tu veux une classe, et namespace quand tu veux un namespace.
    Je partage cette analyse de ne pas faire un struct/classe uniquement pour regrouper des fonctions statiques.
    Cependant, à partir du moment où il semble y avoir des variables donc un contexte, des invariants? à respecter, une classe n'est pas peut être pas de trop. Que cette classe ne soit pas visible de l'extérieur ne signifie pas qu'elle n'a pas lieu d'exister. En reprenant le code screetch, cela pourrait être :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    namespace CodeBarreHelper
    {
        namespace
        {
            class CodeBarreHelperCommand
            {
            public:
                CodeBarreHelperCommand():maVariable(...){}
                QPixmap*BuildPixMap()
                {
    	             //...
                }
            private:
                const int maVariable;
                QPixmap* makeNewPixmap()
                {
                ...
                }
                void drawCodeBarre(QPixmap* p, ...)
                {
                ...
                }
                void doMoreStuff()
                {
                ...
                }
            };
        }
     
        QPixmap* makeCodeBarre(...)
        {
        CodeBarreHelperCommand cmd;
        cmd.BuildPixMap();
        };
    }

    Ne serait-ce que parce que la fonction proposée par screetch, du fait de l'utilisation d'une variable "globale", n'est pas réentrante

  10. #10
    screetch
    Invité(e)
    Par défaut
    ouép mais ma globale etait constante, c'est une espèce de reflexe que j'ai eu =)
    je ne sais pas a quoi servirait une variable globale ici, donc lorsque j'ai écrit j'ai pas trop fait attention.
    Et le static, c'est une faute de ma part aussi, la fonction est bien dans le header et elle devrait pas être statique

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

Discussions similaires

  1. [XPATH] Récupérer Namespaces dans structure XML
    Par lezert dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 23/01/2013, 10h43
  2. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  3. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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