Celle là est vraiment très moche!
Si vous survivez aux couleurs criardes et au design digne d'un enfant de 10 ans, vous découvrirez une tentative (désespérée?) d'explication des différentes sortes de variables en Java.
Donc, si vous n'arrivez décidément pas à faire la différence entre une variable d'instance une variable locale, cette présentation est pour vous. Attention les yeux!
1. Variable vs variable
Programme
Modèle statique
Au début, il y a le
programme...
Modèle dynamique
2. Variable vs variable
Programme
Modèle statique
Classe Classe
Modèle dynamique
Le programme définit un
certain nombre de classes
3. Variable vs variable
Programme
Modèle statique
Les classes servent à
Classe Classe instancier des objets
Objet Objet Objet
Modèle dynamique
4. Variable vs variable
Programme
Modèle statique
Classe Classe
Les objets possèdent
Objet Objet Objet méthodes
des
Modèle dynamique
Méthode Méthode
5. Variable vs variable
Programme
Modèle statique
Classe Classe
Vous connaissez les
Objet variables locales?
Objet Objet
Modèle dynamique
Méthode Méthode
Variable locale Variable locale 1 Variable locale N
6. Variable vs variable
Chaque « étage » peut
Programme avoir ses variables !
Variable globale 1 Variable globale N
Modèle statique
Classe Classe
Variable de classe Variable de classe 1 Variable de classe N
Objet Objet Objet
Modèle dynamique
Variable d'instance 1 Variable d'instance Variable d'instance
Méthode Méthode
Variable locale Variable locale 1 Variable locale N
7. Variable vs variable
Programme
Variable globale 1 Variable globale N
Modèle statique
Classe Classe
Variable de classe Variable de classe 1 Variable de classe N
Seules les méthodes
Objet Objet sont « actives » !
Objet
Modèle dynamique
Variable d'instance 1 Variable d'instance Variable d'instance
Méthode Méthode
Variable locale Variable locale 1 Variable locale N
8. Variable vs variable
Programme
Variable globale 1 Variable globale N
Modèle statique
Classe Classe
Variable de classe Variable de classe 1 Variable de classe N
Pendant son exécution,
une méthode « voit » de
Objet Objet Objet
nombreuses variables
Modèle dynamique
Variable d'instance 1 Variable d'instance Variable d'instance
Méthode Méthode
Variable locale Variable locale 1 Variable locale N
9. Variable vs variable
Variables globales Visible par toutes les méthodes de tous les
objets de toutes les classes
Modèle statique
Variables de classe Visible par toutes les méthodes de tous les
objets d'une classe
Modèle dynamique
Variables d'instance Visible par toutes les méthodes d'un objet
Variables locales Visible par une méthode
10. Variable vs variable
Variables globales
+ visible
Modèle statique
Variables de classe
Modèle dynamique
Variables d'instance
Variables locales - visible
11. Variable vs variable
Variables globales
Modèle statique
une déclaration
=
un exemplaire
Variables de classe
Modèle dynamique
Variables d'instance
une déclaration
=
plusieurs exemplaires
Variables locales
12. Variable vs variable
Dans un programme bien conçu
Variables globales - nombreuses
Modèle statique
Variables de classe
Modèle dynamique
Variables d'instance
Variables locales + nombreuses
13. Variable vs variable
Dans un programme bien conçu
Variables globales à utiliser en dernier ressort
Modèle statique
Variables de classe
Modèle dynamique
Variables d'instance
Variables locales à utiliser en priorité
14. Variable vs variable
Un exemple:
On veut un programme
pour afficher une liste de
livres
15. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
new Livre(1, "The Lord of the Ring")
};
for(Livre l : livres) {
System.out.println(l);
}
}
}
16. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
Initialisation
new Livre(1, "The Lord of the Ring")
};
for(Livre l : livres) {
System.out.println(l);
Traitement
}
}
}
17. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
Initialisation
new Livre(1, "The Lord of the Ring")
};
Ces données doivent
pouvoir être récupérées là
for(Livre l : livres) {
System.out.println(l);
Traitement
}
}
}
18. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
Initialisation
new Livre(1, "The Lord of the Ring")
};
Solution:
Chaque livre doit mémoriser ses
informations
for(Livre l : livres) {
System.out.println(l);
Traitement
}
}
}
19. Variable vs variable
Variables globales Une pour le programme
Modèle statique
Variables de classe Une pour la classe
Modèle dynamique
Variables d'instance Une pour chaque objet
Variables locales Une pour chaque appel de méthode
20. Variable vs variable
Variables globales Une pour le programme
Modèle statique
Variables de classe Une pour la classe
Chaque livre doit mémoriser ses
informations
Modèle dynamique
Variables d'instance Une pour chaque objet
Variables locales Une pour chaque appel de méthode
21. Variable vs variable
Un exemple:
public class Livre {
public Livre(int id, String titre) {
this.id = id;
this.titre = titre;
}
public String toString() {
return "id: " + id + " titre: " + titre;
}
private final int id;
private final String titre;
}
22. Variable vs variable
Un exemple:
public class Livre {
public Livre(int id, String titre) {
Constructeur: this.id = id;
Sert this.titre = titre;
à
initialiser l'objet
}
public String toString() {
return "id: " + id + " titre: " + titre;
Méthode
}
private final int id;
private final String titre;
}
23. Variable vs variable
Un exemple:
paramètre ≈ variable locale
public class Livre {
public Livre(int id, String titre) {
this.id = id;
Constructeur
this.titre = titre;
}
public String toString() {
return "id: " + id + " titre: " + titre;
Méthode
}
private final int id;
private final String titre;
}
Variable d'instance
24. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
new Livre(1, "The Lord of the Ring"),
new Livre(1, "Tom Bombadil")
};
for(Livre l : livres) {
System.out.println(l);
}
}
}
25. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
new Livre(1, "The Lord of the Ring"),
new Livre(1, "Tom Bombadil")
};
Oups !
for(Livre l : livres) {
System.out.println(l);
}
}
}
26. Variable vs variable
Un exemple:
public class Librairie {
public static void main(String[] args) {
Livre[] livres = {
new Livre(0, "The Hobbit"),
new Livre(1, "The Lord of the Ring"),
new Livre(1, "Tom Bombadil")
};
Solution:
Ne pas compter sur l'appelant,
Mais mémoriser d'un objet à l'autre
for(Livre l : livres) {
le compteur des « id »
System.out.println(l);
}
}
}
27. Variable vs variable
Variables globales Une pour le programme
Modèle statique
Variables de classe Une pour la classe
Modèle dynamique
Variables d'instance Une pour chaque objet
Variables locales Une pour chaque appel de méthode
28. Variable vs variable
Variables globales Une pour le programme objet à l'autre
Mais mémoriser d'un
le compteur des « id »
Modèle statique
Variables de classe Une pour la classe
Modèle dynamique
Variables d'instance Une pour chaque objet
Variables locales Une pour chaque appel de méthode
29. Variable vs variable
Un exemple:
public class Livre {
public Livre(String titre) {
this.id = nextId++;
this.titre = titre;
} Variable de classe
public String toString() {
return "id: " + id + " titre: " + titre;
}
private static int nextId = 0;
private final int id;
private final String titre;
}
Variable d'instance
30. Variable vs variable
Refactorisez:
public static void main(String[] args) {
Librairie librairie = new Librairie();
librarie.afficheLivres();
}
http://olympe.maupertuis.intra/svn/cours/trunk
./variables
31. Variable vs variable
visibilité: + -
Modèle statique Modèle dynamique
Programme
Variable globale Objet
Variable d'instance
Classe
instanciation
Variable de classe
Méthode
Variable locale
Unique Autant que nécessaire