=====Attributs et méthodes de classe=====
====Rappels sur les attributs et méthodes d'instance====
=== Principe===
\\ \\ Les attributs et méthodes __d'instance__ sont associés à des instances d'objets, c'est à dire des exemplaires d'objets.
{{ bloc2:prog:poo:attribmethclasse1.jpg?400 |}}
=== Intérêts ===
* Représenter le monde réel au plus près de la réalité et sa relative complexité ;
=== Limites===
* Le partage de données entre instances est impossible ;
* Il n'existe pas de données hors instance ;
* Il n'existe pas de traitement hors-instance ;
====Attributs et méthodes de classe====
=== Principe===
{{ bloc2:prog:poo:attribmethclasse2.jpg?400 |}}
\\ \\ \\
Un attribut ou une méthode __de classe__ existe hors de toute instance.
=== Usages courants===
* Données partagées entre instances ;
* Données indépendantes d'une instance (ex. : les constantes intangibles, comme Pi) ;
* Classes utilitaires regroupant des méthodes pour lesquelles le recours à une approche POO n'est pas utile.
====Aspects syntaxiques====
public class UneClasse {
private static int nb = 0;
public static void uneMethode(String arg){
...
UneClasse.nb += 1;
}
}
\\ \\
public class Starter {
public static void main(String args[]){
UneClasse.uneMethode("Essai") ;
}
}
* Le mot-clé **static** est utilisé pour désigner un attribut ou une méthode __de classe__ ;
* Par définition, un attribut de classe ne peut pas être initialisé dans le constructeur. Il **doit donc être initialisé sur sa ligne de déclaration** ;
* Par définition, pour référencer un attribut ou une méthode de classe, on utilisera la syntaxe **Classe.attribut** ou **Classe.methode()** plutôt que la syntaxe **instance.attribut** ou **instance.methode()**, même si cette écriture est acceptée avec une notification non bloquante. Faut-il encore disposer d'une instance pour utiliser cette dernière écriture ...