web-dev-qa-db-fra.com

Quand dois-je utiliser des méthodes statiques dans une classe et quels sont les avantages?

J'ai un concept de variables statiques mais quels sont les avantages des méthodes statiques dans une classe. J'ai travaillé sur certains projets mais je n'ai pas rendu une méthode statique. Chaque fois que j'ai besoin d'appeler une méthode d'une classe, je crée un objet de cette classe et appelle la méthode souhaitée.

Q: La variable statique dans une méthode conserve sa valeur même lorsque la méthode est exécutée mais accessible uniquement dans sa méthode conteneur mais quelle est la meilleure définition de la méthode statique?

Q: L'appel de la méthode statique sans créer d'objet de cette classe est-il le seul avantage de la méthode statique?

Q: Quelle est la plage accessible pour la méthode statique?

Merci

62
Naveed

Votre description d'une variable statique correspond mieux à celle trouvée en C. Le concept de variable statique en termes orientés objet est conceptuellement différent. Je tire de Java ici. Les méthodes et les champs statiques sont utiles lorsqu'ils n'appartiennent pas conceptuellement à une instance de quelque chose.

Considérons une classe Math qui contient des valeurs communes comme Pi ou e, et quelques fonctions utiles comme sin et cos. Cela n'a vraiment aucun sens de créer des instances distinctes pour utiliser ce type de fonctionnalité, elles sont donc meilleures en tant que statiques:

// This makes little sense
Math m = new Math();
float answer = m.sin(45);

// This would make more sense
float answer = Math.sin(45);

Dans les langues OO (à nouveau, à partir d'une fonction Java perspective), ou mieux connue sous le nom de méthodes, ne peuvent pas avoir de variables locales statiques. Seules les classes peuvent avoir des membres statiques, qui, comme je l'ai dit, ressemble peu à l'idée de statique en C.

62
D.C.

Les méthodes statiques ne transmettent pas de pointeur "this" à un objet, elles ne peuvent donc pas référencer des variables ou des méthodes non statiques, mais peuvent par conséquent être plus efficaces au moment de l'exécution (moins de paramètres et pas de surcharge pour créer et détruire un objet).

Ils peuvent être utilisés pour regrouper des méthodes cohérentes en une seule classe, ou pour agir sur des objets de leur classe, comme dans le modèle d'usine.

15
PhilMY

Syntaxe (php) pour les méthodes statiques:

<?php
class Number {
    public static function multiply($a, $b) {
        return $a * $b;
    }
}
?>

Code client:

echo Number::multiply(1, 2);

Ce qui est plus logique que:

$number = new Number();
echo $number->multiply(1, 2);

Comme la méthode multiply() n'utilise aucune variable de classe et ne requiert donc pas d'instance de Number.

12
jmoz

Essentiellement, les méthodes statiques vous permettent d'écrire du code procédural dans un langage orienté objet. Il vous permet d'appeler des méthodes sans avoir à créer d'abord un objet.

8
David Hodgson

La seule fois où vous souhaitez utiliser une méthode statique dans une classe, c'est quand une méthode donnée ne nécessite pas la création d'une instance d'une classe. Cela peut être lorsque vous essayez de renvoyer une source de données partagée (par exemple un Singleton) ou lorsque vous effectuez une opération qui ne modifie pas l'état interne de l'objet (String.format par exemple).

Cette entrée wikipedia explique assez bien les méthodes statiques: http://en.wikipedia.org/wiki/Method_ (computer_science) #Static_methods

6
AndrewMurphy

Les variables statiques et les méthodes statiques sont liées à la classe et non à une instance de la classe.

Les méthodes statiques ne doivent pas contenir un "état". Tout ce qui est lié à un état doit être lié à un objet instancié et non à la classe.

4
Travis

Méthodes statiques en PHP :

Peut être appelé sans créer un objet classe.

Ne peut faire appel qu'à des méthodes et fonctions statiques.

2
Ihsanullah khan

Une utilisation courante des méthodes statiques se trouve dans l'idiome du constructeur nommé. Voir: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.8 .

2
Kyle Lutz

les éléments statiques sont accessibles depuis n'importe quel contexte (c'est-à-dire n'importe où dans votre script), vous pouvez donc accéder à ces méthodes sans avoir à passer une instance de la classe d'un objet à l'autre.

Les éléments statiques sont disponibles dans chaque instance d'une classe, vous pouvez donc définir des valeurs que vous souhaitez mettre à la disposition de tous les membres d'un type.

pour en savoir plus n lien !

1
Purushothaman

La variable statique est utilisée lorsque vous souhaitez partager des informations entre différents objets de la classe.Comme la variable est partagée, chaque objet peut la mettre à jour et la valeur mise à jour est également disponible pour tous les autres objets. Comme les variables statiques peuvent être partagées, elles sont souvent appelées variables de classe.

1
sunny