=====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 ...