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

Langages de programmation Discussion :

Singleton vs. static ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 84
    Par défaut Singleton vs. static ?
    Je me demandais pourquoi faire une class singleton si je peux tout simplement la faire avec tous mes attributs et mes méthodes static ? Ça reviendrait à la même chose non !? Le premier aurait seulement qu'une instance et le second utiliserait directement la class sans passer par une instance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Le singleton est un pattern de conception.
    Il s'agit de rendre compte que certains objets de l'application sont uniques.
    Exemple: le fichier de configuration, la connexion au SGDB,...

    Réaliser "cette propriété" avec du code dépend du langage de programmation utilisé. Avec un langage OO, "instancier" servira à appeler le constructeur et initialiser l'objet (ouvrir le fichier, la connexion,...).

    Si le propos est d'encapsuler des variables globales dans une classe, pas la peine d'instancier ni même d'appeler cela Singleton, "variables globales" est quand même plus juste.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Citation Envoyé par BastienCil Voir le message
    Je me demandais pourquoi faire une class singleton si je peux tout simplement la faire avec tous mes attributs et mes méthodes static ? Ça reviendrait à la même chose non !? Le premier aurait seulement qu'une instance et le second utiliserait directement la class sans passer par une instance.
    Bonjour,

    Je me posais la même question que toi il y a quelques années.
    C'est un sujet très intéressant je trouve.

    Pour répondre à ta question, en apparence, oui, cela reviendrait au même, en réalité, c’est plus compliqué.


    Tout dépend de ce que tu veux mettre dans ces méthodes statiques.
    Si par exemple, tu veux mettre du métier et que tu souhaites réaliser des tests unitaires avec des outils standards, tu auras du mal à mocker ou stuber les appels à ces méthodes statiques puisque que cette classe n'a pas d'instance. (Il existe des apis qui modifient le bytecode pour cela mais je préfère ne pas les utiliser).
    L'argument est également valable si tu souhaites modéliser des hiérarchies de classes ou d’interfaces autour de ta classe. En effet, les méthodes statiques ne peuvent pas faire partie d’une hiérarchie de type, donc une classe qui ne comporte que des méthodes statiques perd donc rapidement son utilité dans une conception POO: la méthode est ni contractualisable (interface), ni héritable, ni redéfinissable (héritage).

    C'est pourquoi les classes final abstract non instantiable, qui comportent uniquement des méthodes statiques sont souvent des classes avec des méthodes utilitaires basiques, plutôt génériques, avec peu ou pas de logique métier et ne s'inscrivant pas dans une conception OO, ex : formatage de date, copy de beans, conversions, factory d’objets, etc… Ce type de classe ressemble davantage à ce que l'on fait dans les langages purement procéduraux.
    Elles ont leur utilité, car comme tu l'as remarqué, elles sont simples à créer et à manipuler. Mais elles ont également leur limite, à l'instar des langages procéduraux.

    Perso, je les utilise les mais j’essaye de le faire à bon escient.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par thebloodyman Voir le message
    C'est pourquoi les classes final abstract non instantiable, qui comportent uniquement des méthodes statiques sont souvent des classes avec des méthodes utilitaires basiques, plutôt génériques, avec peu ou pas de logique métier et ne s'inscrivant pas dans une conception OO, ex : formatage de date, copy de beans, conversions, factory d’objets, etc… Ce type de classe ressemble davantage à ce que l'on fait dans les langages purement procéduraux..
    Tout cela est assez spécifique au monde Java... qui est fort respectable certes mais avec des contraintes que n'ont pas d'autres langages sur ce sujet.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Tout cela est assez spécifique au monde Java... qui est fort respectable certes mais avec des contraintes que n'ont pas d'autres langages sur ce sujet.
    - W
    Salut wiztricks,

    En C#, j'ai également eu à faire à ce type de problématique. En même temps, c'était un clone de Java à l'origine...

    Tu parles de quel langage en particulier ?

  6. #6
    Membre chevronné
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Par défaut
    Bonjour,

    Il me semble qu'une autre différence est le temps d'accès et la possibilité de décharger un singleton de la mémoire. Les attributs et méthodes static doivent rester en mémoire dès lors que la classe est appelée une fois, alors que pour un singleton, si l'instance unique est passée à null (à l'aide d'une méthode static "Liberer" par exemple), ses membres ne se trouvent plus en mémoire. Par contre, à chaque fois qu'on l'instancie, il y a un temps de création de l'objet ...

    Sauf si je me trompe, le singleton a ces deux particularités par rapport aux attributs et méthodes static.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par jcdentons Voir le message
    Il me semble qu'une autre différence est le temps d'accès et la possibilité de décharger un singleton de la mémoire. Les attributs et méthodes static doivent rester en mémoire dès lors que la classe est appelée une fois, alors que pour un singleton, si l'instance unique est passée à null (à l'aide d'une méthode static "Liberer" par exemple), ses membres ne se trouvent plus en mémoire. Par contre, à chaque fois qu'on l'instancie, il y a un temps de création de l'objet ...
    Si le Singleton se réduit à des variables "globales", elles seront accessibles pendant toute la durée du programme modulo une initialisation. Si le Singleton doit exister de temps en temps pendant la durée de vie du programme, il sera plus simple "d'instancier" un objet pour le libérer en cas de besoins.

    Ces fonctionnalités supplémentaires coûteront "plus".

    Ceci dit, lorsqu'on code dans un langage particulier, il y a des "bonnes pratiques" côté réalisation d'un Singleton qu'il peut être judicieux de respecter: tout le monde reconnaîtra la réalisation d'un Singleton...
    Cette réalisation a des fonctionnalités superflues vis à vis du Singleton de la "conception" mais on évitera des pertes de temps à assurer que la "réalisation" est fidèle aux attentes (à la "conception"),

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par thebloodyman Voir le message
    En C#, j'ai également eu à faire à ce type de problématique. En même temps, c'était un clone de Java à l'origine...
    Le PO ne parle pas d'un langage particulier sinon il aurait probablement posté sa question dans le forum ad hoc.
    De plus le Singleton est un pattern de conception, on le réalisera en fonction des besoins et des possibilités du langage.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. singleton vs static
    Par cyrano_de_bergerac dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 25/06/2013, 13h07
  2. Réponses: 3
    Dernier message: 21/02/2010, 19h09
  3. Singleton ou static
    Par yannick1717 dans le forum Général Java
    Réponses: 10
    Dernier message: 29/01/2008, 18h02
  4. [Language][Static vs Singleton] Précisions
    Par vincent63 dans le forum Langage
    Réponses: 6
    Dernier message: 14/11/2005, 17h00
  5. singleton et static
    Par elekis dans le forum C++
    Réponses: 2
    Dernier message: 10/09/2005, 16h11

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