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 :

Classe statique vs singleton


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Activité
    Inscrit en
    Juillet 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Activité

    Informations forums :
    Inscription : Juillet 2005
    Messages : 94
    Par défaut Classe statique vs singleton
    Bonjour!

    J'ai cherché sur le web la différence entre une classe statique et un singleton. Voici différents points que j'ai retenus. Certains sont discutables.

    Singleton:
    -Permet de passer une référence à l'objet.
    -Permet la sérialisation.
    -Permet le polymorphisme.
    -Permet de conserver un état.
    -Permet le multi-threading.
    -Permet un constructeur.

    Classe statique:
    -Permet de conserver un état.
    -Permet le multi-threading (lock sur un objet statique à l'intérieur de la classe par exemple).
    -Ne permet pas de constructeur, mais une méthode d'initialisation équivalente.

    Dans mon cas, j'ai une classe (je ne sais pas si elle doit être statique ou un singleton) qui ne nécessite pas le polymorphisme, ni de référence, ni de sérialisation. J'ai seulement à conserver l'état et j'aurai peut-être un peu de multi-threading.

    En fait, j'ai des 3 classes qui peuvent contenir des données. Les données sont extraites à partir de trois tables d'une base de données. La classe prolématique est celle qui s'occupe d'extraire les données de la base de données et de remplir un via diverses méthodes qui rempliront certains champs et retourneront un objet de type d'une des trois classes.

    L'état à conserver dans la classe problématique est seulement la connexion avec la base de données et des trucs du genre.

    Je peux facilement implémenter ces deux situations: utiliser une classe statique, ou utiliser un singleton. J'ai de la difficulté à voir, conceptuellement, quelle est la meilleure solution. Ce projet sert à pratiquer les bonnes méthodes de programmation, inutile de me dire de faire l'un parce que c'est plus simple, je recherche plutôt ce qui, conceptuellement parlant, est le mieux pour ma situation. Si vous croyez qu'un autre design pattern pourrait s'appliquer, ou quoi que ce soit d'ailleurs, n'hésitez pas à me le dire!

    Merci pour toute aide, ou commentaires!

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Il y a la réponse dans la question :
    Citation Envoyé par Xzander Voir le message
    Ce projet sert à pratiquer les bonnes méthodes de programmation
    = design pattern.
    Les deux méthodes se ressemblent assez au niveau du code, mais le singleton est beaucoup plus élégant qu'une "simple" classe statique

    J'ai vu dans un bouquin qu'il existe le pattern Etat. Peut-être conviendrait-il pour tes 3 autres classes ? Mais j'en sais pas plus, je ne suis pas encore arrivé à ce chapitre ^^

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    on en avait parlé il y a quelques sur ce meme forum (le thread doit avoir le meme nom que celui-la).

    La principale difference, c'est que pour une classe statique, il est moins aisé de controler la durée de vie de ces membres. De fait, si un des membres à une durée de vie plus petite que celle du programme (ce qui dans le cas d'une connexion devrait etre le cas), je m'orienterai pour ma part vers le singleton.

    Apres techniquement, comme tu le dis, tu peux tout à fair faire l'un ou l'autre (je trouve ca moins elegant avec une classe statique mais bon), mais conceptuellement l'approche singleton me parait meilleure.

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    En fait singleton et classe statique sont différent conceptuellement.

    Un singleton te permet de n'instancier qu'une seule fois une classe. C'est son but et rien d'autre.

    La classe statique a pour but de regrouper du code qui est "générique", je veux dire par là, du code qui ne dépend pas d'une classe mais qui peut être utilisé par toutes les classes. Par exemple une classe math.

    Si on prend un exemple :

    1) Une classe fabriquant de voiture.

    2) Renault une classe qui hérite de la classe ci-dessus.

    3) Une instance de Renault -> Singleton, il ne peut y avoir qu'un seul Renault, ses méthodes ne sont pas à utiliser dans toutes les classes, et ne doivent pas être accessible par tout le monde.

    4) Classe Méthode de travail industrielle. -> classe statique, ses méthodes doivent être connues de tous et peuvent être utilisé par n'importe qui.

    Voila j'espère que cela répond à tes questions.

    Donc singleton ou statique -> cela dépende de ton architecture.

    D'ailleurs un truc marrant, si tu définis les choses autrement :

    1) Une classe fabriquant de voiture.

    2) Renault une instance de la classe ci-dessus. -> Ni statique, ni singleton
    Il peut y avoir plusieur fabriquant de voiture, mais chaque fabriquant ne doit pas exposer ses méthodes à tout le monde

    (Après il y a la réflexion pour l'espionnage industrielle )

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Salut ced600

    je regarde ton article... je li (li)

    En gros, j'ajouterais juste que la classe Static c'est un peu pour remplacer
    dans bien des gars les méthodes hors classe que l'on a en C++ ou bien
    un peu le concept de module en VB....

    Bref, c'est pour mettre à disposition des choses qu'on ne trouve pas vraiment
    dans des classes

    Cela dit, chose "marrante", microsoft, pour certaines classes, fournis soit la fonctionnalité via la classe soit via une classe statique (genre File ou FileInfo)

    The Monz, Toulouse

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Les deux méthodes se ressemblent assez au niveau du code, mais le singleton est beaucoup plus élégant qu'une "simple" classe statique
    Malheureusement, ce n'est pas sur un concept d'élégance qu'il faut se baser pour faire un choix.
    Je l'ai déjà dit dans d'autres discussions sur le même sujet, on a tendance à voir une sur-utilisation du pattern Singleton parce que c'est souvent le 1er pattern que l'on apprend et qu'il est facile à placer. Du coup, on en met partout pour pouvoir dire "t'as vu mon design comme il rulez ! j'ai des singleton plein mon code" !

    L'approche "il faut utiliser Singleton plutôt qu'une classe statique parce que c'est un design pattern" est fausse !

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    +1
    Les design pattern sont là pour apporter des solutions. Si l'on part dans une logique que du design pattern, on risque de très vite se limiter et de faire une mauvaise architecture.
    Le design pattern est une solution pas une obligation.

    Par contre n'hesitez pas à regarder sur le net les design pattern existant, certain sont vraiment bien foutu. par exemple le design pattern adaptateur est très utile lorsque certaine des interfaces du projet peuvent changer ou ne sont pas encore bien définis. (mais inutile si les interfaces sont fixés et resteront inchangés.)

    je regarde ton article... je li (li)
    J'adore parler, alors ce ressent sur mes postes

  8. #8
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Keihilin Voir le message
    Malheureusement, ce n'est pas sur un concept d'élégance qu'il faut se baser pour faire un choix.
    Je l'ai déjà dit dans d'autres discussions sur le même sujet, on a tendance à voir une sur-utilisation du pattern Singleton parce que c'est souvent le 1er pattern que l'on apprend et qu'il est facile à placer. Du coup, on en met partout pour pouvoir dire "t'as vu mon design comme il rulez ! j'ai des singleton plein mon code" !

    L'approche "il faut utiliser Singleton plutôt qu'une classe statique parce que c'est un design pattern" est fausse !
    Tout ça ne nous dit pas ce qui est mieux dans le cas de Xzander...

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

Discussions similaires

  1. Classe statique ou singleton
    Par lcfseth dans le forum C#
    Réponses: 3
    Dernier message: 15/07/2010, 15h56
  2. Singleton / classe statique
    Par Atatorus dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2009, 23h18
  3. Classe statique en C++ ?
    Par oodini dans le forum C++
    Réponses: 9
    Dernier message: 18/10/2006, 13h31
  4. classe statique objet
    Par drKzs dans le forum Langage
    Réponses: 8
    Dernier message: 04/09/2006, 11h58
  5. Classe statique
    Par jeje99 dans le forum Langage
    Réponses: 12
    Dernier message: 04/01/2006, 16h50

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