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

avec Java Discussion :

Class / méthodes static


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut Class / méthodes static
    Bonjour,

    je code depuis peu en JAVA, et je vois une utilisation à gogo de méthodes statiques, et je me pose pas mal de question à ce sujet.

    Est ce réellement propre de faire des classes comprenant que des méthodes statiques ?

    Si cela n'est pas si moche que cela, n'en arrive-t-on pas à en abuser de partout ?

    Finalement, quand les utiliser ? et quand ne pas le faire ?

    Merci à tout âme charitable m'expliquant un peu tout cela, et m'aidant à prendre rapidement de bons reflexes.

    ps : imaginons un cas pratique, l'écriture d'une classe permettant de compresser/décompresser/visualiser les fichiers d'une archive zip, je vois beaucoup d'exemple sur le net où tout est en static. Pourquoi ne pas en faire une vraie class à instancier avec des méthodes permettant de parametrer le taux de compression, d'ajouter les fichiers à traiter, le nom de l'archive etc ?

  2. #2
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    T'as plusieurs options au choix:
    - La conception nécessite que ces méthodes soient statiques, là tu ne peux pas grand chose et c'est juste que tu tombes plus souvent sur ce cas,
    - T'as à faire à des bras cassés qui ne savent pas faire ça autrement, ce qui est tout aussi envisageable.

    Plus globalement, ça dépend vraiment du besoin.

    Quand les utiliser? Quand la classe fournit des méthodes sans stocker des données ou encore quand la méthode n'utilise pas les données internes.
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un bon critère, a mes yeux, c'est la présence de champs statiques en grand nombre. Il existe plusieurs cas:

    -> La méthode est indépendante de tout instance (exemple Integer.parseInt(String)), il n'y a alors pas de raison logique de ne pas la mettre en statique et elle ne manipule aucun champ
    -> La "classe" est une classe utilitaire pour laquelle il n'y a pas de sens de créer plusieurs instance: on préfère en général à ce schéma un schéma de type singleton ou il existe une instance unique. C'est le cas, par exemple, avec des factory
    -> La classe manipule plein de membres statique et a été codée par une équipe de bras cassé qui n'a toujours pas trouver comment utiliser un constructeur: le cas le plus courant amha

    En pratique, la sonnette d'alarme devrait retentir quand
    -> il y a beaucoup de classes statiques dans le projet (par opposition à 2/3 classes)
    -> il y a beaucoup de champs statique dans ces classes
    -> on commence à passer beaucoup de paramètres aux méthodes statiques, paramètres qui aureient eu leur place en temps que membre d'une instance de cette classe.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut
    Je vais aller plus loin alors dans les explications de mon cas actuel.

    En gros, je suis sur un projet où il y a plusieurs petites applis J2EE qui sont maintenues, et (enfin) il se décide de mutualiser du code :p

    Bref une "librairie" se développe au fur et à mesure mais à tendance à être souvent bardée de méthodes statiques qui au final me fait souvent pensé à l'utilisation de DLL (pour moi venant plutot d'une programmation en win32, old school).

    Là, je dois finalement y intégrer cette fameuse classe permettant de manipuler des fichiers zip. Pour le moment, 3 méthodes "classiques" à réaliser : compression, décompression mais surtout visualiser le contenu de l'archive.

    Bref par habitude, n'ayant pas le reflexe, j'aurais fait une classe que j'aurais instancié, en y settant le taux de compression, en utilisant une méthode d'ajout des fichiers à compresser, le nom de l'archive etc etc...

    Maintenant, en lisant vos commentaires et notamment :

    -> La "classe" est une classe utilitaire pour laquelle il n'y a pas de sens de créer plusieurs instance: on préfère en général à ce schéma un schéma de type singleton ou il existe une instance unique. C'est le cas, par exemple, avec des factory
    je me dis que des méthodes statiques doivent suffire puisqu'on rentrerait dans ce cas là. Une seule instanciation de la classe, des manips et basta.
    Bref autant en faire du static, non ?

    Qu'en pensez vous ?

    Anyway, un grand merci pour vos réponses

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    non on est pas dans le cas puis que une compresison =
    1 série de paramètre par rapport à la compression
    un ensemble de fichier à compresser
    d'autres trucs éventuels


    Donc clairement en "bon" design, il est plus logique d'avoir une instance par travail à effectuer. Plutot que de passer des tonnes de paramètres à une méthode statique. Toutes ces méthodes vont clairement tourner autour d'un "archive" qu'elle soit existante ou a créer.

  6. #6
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    La réponse est là:
    Citation Envoyé par gwinyam Voir le message
    Quand la classe fournit des méthodes sans stocker des données ou encore quand la méthode n'utilise pas les données internes.
    Citation Envoyé par tchize_ Voir le message
    -> La méthode est indépendante de tout instance (exemple Integer.parseInt(String)), il n'y a alors pas de raison logique de ne pas la mettre en statique et elle ne manipule aucun champ
    Citation Envoyé par tchize_ Voir le message
    -> La "classe" est une classe utilitaire pour laquelle il n'y a pas de sens de créer plusieurs instance: on préfère en général à ce schéma un schéma de type singleton ou il existe une instance unique. C'est le cas, par exemple, avec des factory
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut
    ah faut choisir là car vous vous contredisez :p

    mais je pense avoir pigé...

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

Discussions similaires

  1. obtenir le nom de la classe dans une méthode static
    Par einboubou dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 13/11/2009, 16h46
  2. Appel d'une méthode static d'une autre classe
    Par Mooneer dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2008, 19h05
  3. Réponses: 9
    Dernier message: 12/04/2007, 17h08
  4. Réponses: 6
    Dernier message: 27/07/2005, 09h06
  5. [FLASH MX2004] [AS2] Classe méthodes static
    Par bolo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 16/12/2004, 18h26

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