Question

De plus, les méthodes statiques présentent-elles des avantages en termes de performances par rapport aux méthodes d'instance ?

Je suis tombé récemment sur ce qui suit : http://www.cafeaulait.org/course/week4/22.html :

Quand une méthode doit-elle être statique ?

  1. Ni lecture ni écriture dans les champs d'instance
  2. Indépendant de l'état de l'objet
  3. Les méthodes mathématiques qui acceptent les arguments, appliquent un algorithme à ces arguments et renvoient une valeur
  4. Méthodes d'usine qui remplacent les constructeurs

Je serais très intéressé par les retours de la communauté Stack Overflow à ce sujet.

Était-ce utile?

La solution

Rendre les méthodes statiques lorsqu'elles ne font pas partie de l'instance.Ne vous inquiétez pas des micro-optimisations.

Vous constaterez peut-être que vous disposez de nombreuses méthodes privées qui peuvent être statiques, mais vous appelez toujours à partir de méthodes d'instance (ou entre elles).Dans ce cas, cela n'a pas vraiment d'importance.Cependant, si vous souhaitez réellement pouvoir tester votre code, et peut-être l'utiliser ailleurs, vous pouvez envisager de créer ces méthodes statiques dans une classe différente et non instanciable.

Autres conseils

Le fait qu’une méthode soit statique ou non est davantage une considération de conception que d’efficacité.Une méthode statique appartient à une classe, tandis qu'une méthode non statique appartient à un objet.Si vous aviez un cours de mathématiques, vous disposez peut-être de quelques méthodes statiques pour gérer l'addition et la soustraction, car ce sont des concepts associés aux mathématiques.Cependant, si vous aviez une classe Voiture, vous pourriez avoir quelques méthodes non statiques pour changer de vitesse et diriger, car celles-ci sont associées à une voiture spécifique, et non au concept de voiture en général.

Un autre problème avec les méthodes statiques est qu'il est assez pénible d'écrire des tests unitaires pour celles-ci - du moins en Java.Vous ne pouvez en aucun cas vous moquer d’une méthode statique.Il y a un publier sur le blog de test Google à propos de ce problème.

Ma règle générale est d'écrire des méthodes statiques uniquement lorsqu'elles n'ont pas de dépendances externes (comme l'accès à la base de données, la lecture de fichiers, les e-mails, etc.) pour les garder aussi simples que possible.

@jagmal Je pense que vous avez des fils croisés quelque part - tous les exemples que vous citez ne sont clairement pas des méthodes statiques.

Les méthodes statiques doivent traiter entièrement des propriétés et des concepts abstraits d'une classe - elles ne doivent en aucun cas se rapporter à des attributs spécifiques à une instance (et la plupart des compilateurs crieront s'ils le font).

Pour l'exemple de la voiture, la vitesse et les kilomètres parcourus sont clairement liés aux attributs.Le changement de vitesse et le calcul de la vitesse, lorsqu'ils sont considérés au niveau de la voiture, dépendent des attributs - mais considérons une classe carModel qui hérite de car :à ce stade, elles pourraient devenir des méthodes statiques, dans la mesure où les attributs requis (tels que le diamètre de la roue) pourraient être définis comme des constantes à ce niveau.

N'oubliez pas que chaque fois que vous écrivez une méthode statique, vous écrivez une méthode inflexible dont le comportement ne peut pas être modifié très facilement.

Vous écrivez du code procédural, donc s'il est logique d'être procédural, faites-le.Sinon, il devrait probablement s'agir d'une méthode d'instance.

Cette idée est tirée de un article de Steve Yegge, que je pense être une lecture intéressante et utile.

En termes de performances, une méthode statique C++ peut être légèrement plus rapide qu'une méthode d'instance non virtuelle, car il n'est pas nécessaire qu'un pointeur « this » soit transmis à la méthode.À leur tour, les deux seront plus rapides que les méthodes virtuelles car aucune recherche VMT n’est nécessaire.

Mais il est probable que cela se situe dans le bruit - en particulier pour les langages qui permettent d'optimiser le passage de paramètres inutiles.

Voici une discussion connexe sur pourquoi String.Format est statique cela mettra en évidence certaines raisons.

Une autre chose à considérer lors de la création de méthodes statiques est que toute personne capable de voir la classe peut appeler une méthode statique.Alors que lorsque la méthode est une méthode d'instance, seuls ceux qui ont accès à une instance peuvent appeler cette méthode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top