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 : Singleton et dérivation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut Conception : Singleton et dérivation
    Bonjour,

    j'aimerais dériver une classe singleton que j'utilisais jusqu'à lors en l'incluant.
    Je me suis aperçu qu'en fait il vallait mieux la dériver.

    Peut-on le faire ? Si oui, y at-il des contraintes particulières à faire cela ? Des recommandations ?

    La classe de base gère un service windows. Je désire donc faire une classe CApp dérivant de ma classe CService, tout en conservant l'unicité du singleton.

    CApp doit il être forcément désigné un singleton si CService est laissé singleton ?
    Ou plutôt en faire une classe abstraite et désigner CApp en singleton ?

    Merci par avance pour vos éclairages.

    @+

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Franchement, le seul rapport que je vois entre Singleton et dérivation, c'est qu'on implémente souvent le pattern Singleton avec une classe template, dont chaque classe singleton hérite en CRTP (Curiously Recurring Template Pattern).

    En clair:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template< class Type >
    class TSingleton< Type >
    {
    	static Type* ptr;
    };
     
    template< class Type >
    Type* TSingleton< Type >::ptr:
     
     
     
    class UneClasseSingleton : private TSingleton< UneClasseSingleton >
    {
    };
    Par contre, je ne sais pas exactement pourquoi on dérive ainsi. Je suppose que ça aide à forcer l'instanciation du template...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    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
    Par défaut
    Un peu comme Medinoc, ton besoin me semble pour le moins étrange.
    En gros, ton CApp aura des responsabilités supplémentaires que CService : gérer le singleton + autre chose
    --> Problème de conception...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Bonjour,
    merci pour vos réponses.

    Sinon, comme je le suggérais aussi :
    - CService est une classe abstraite (forcée à être dérivée). Elle gère toute la partie service windows.
    - CApp est un singleton dérivant de CService. Elle gère la partie spécifique de l'application.

    Cette conception tient-elle la route ?

    @+

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sans plus d'infos, je dirais que oui...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    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
    Par défaut
    En ce sens, CService n'est pas un singleton, c'est CApp qui doit l'être puisque c'est lui qui est instancié; non?

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    [...](Curiously Recurring Template Pattern)[...]
    Par contre, je ne sais pas exactement pourquoi on dérive ainsi. Je suppose que ça aide à forcer l'instanciation du template...
    Le singleton doit connaître la classe (pour en stocker et renvoyer l'unique instance), il doit donc en dépendre (template).

    La classe ne doit pas pouvoir être instanciée autrement que par le singleton. On ne peut pas juste déclarer des Singleton<MaClasse>, il faut que la moindre référence à MaClasse fasse appel au mécanisme de singleton -> héritage.

    C'était bien ta question ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Oui.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    @Luc
    Mais ... la dérivation est-elle vraiment pertinente? Ne s'agit-il pas plutôt d'un problème de réutilisation de service depuis un autre singleton ?
    Oui c'est exactement ça.
    Pour l'instant j'ai fait une classe abstraite CService et une CApp qui en dérive. Et CApp est mon singleton.
    Je ne vois pas vraiment d'autres moyens que la dérivation pour mon cas.
    Je vais prendre un peu + de temps ce soir pour analyser tes exemples de code.

    Déjà merci beaucoup pour vos réponses

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Tu confonds alors spécialisation et utilisation.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. [PHP 5.3] Conception problématique avec Singleton
    Par MegaBigBoss dans le forum Langage
    Réponses: 12
    Dernier message: 21/12/2011, 19h31
  2. [conception] soucis sur un singleton
    Par r0d dans le forum C++
    Réponses: 12
    Dernier message: 11/07/2007, 11h03
  3. [conception] Logger singleton global
    Par r0d dans le forum C++
    Réponses: 1
    Dernier message: 30/03/2007, 20h13
  4. [Conception] Classe abstraite ou singleton
    Par speedster dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2007, 10h39

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