Rôle et comportement des variables statiques

Modérateurs : F. Barthélemy, eric.soutil

Verrouillé
V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Rôle et comportement des variables statiques

Message par V.B.fod31 » 25 oct. 2016 19:18

Bonsoir,
N'y aurait-il pas une erreur dans cette explication ?
2.8.2 Rôle et comportement des variables statiques
Chaque objet à sa propre copie des variables d’instances.[...]
En revanche, il y a une seule copie des variables d’instances par classe.

Il me semble que les deux phrases se contredisent...
Du coup, je ne comprend plus très bien la suite
Tous les objets instances de la classe partagent la même copie. On peut accéder au contenu des variables d’instances par la classe ou par les objets instances de la classe.

Pouvez-vous m'éclairer ?
Merci :)

Jambon14
Messages : 23
Inscription : 25 oct. 2016 21:26

Re: Rôle et comportement des variables statiques

Message par Jambon14 » 25 oct. 2016 23:01

Bonjour

Je me permets de te répondre et d’exposer ma compréhension concernant les variables static
La classe d’un objet c’est comme… un moule à fabriquer des petits robots (objets) ….

Quand tu fais des nouveaux robots avec la class « moule à robots » (patron) les nouveaux robots crées sont des « instances/exemplaires » provenant du « moule à robot ».

Quand tu fabriques ton moule à robot (ta classe) tu définis les attributs des robots qui vont en sortir par exemple la possibilité de choisir entre 4 couleurs différentes, la possibilité de lui donner un nom qui lui est propre etc …

Ainsi le 1er exemplaire qui sort de ton moule à robot sera rouge et s’appellera Totor.
le 2 eme robot sera vert et n’aura pas encore de nom donc il s’appellera ’null’ (nom par défaut)
enfin le 3 eme n’aura pas de couleur défini donc ‘null’ et s’appellera xavox.

Comme tu peux le voir à partir du même moule et avec des attributs communs on a des exemplaires différents. Tes robots vont vivre leur vie et si par exemple on met Totor (le 1er) en violet le autres robots ne vont pas devenir violet aussi, si je donne le nom de popi au robot 2 cela ne changera pas les noms de Totor et xavox.

Les attributs (nom, couleur) de tes robots ce sont les variables d’instance/exemplaire.

Si dans le moule à robot j’avais défini la couleur en static et bien en changeant la couleur d’un robot ce sont tous les robots qui prennent cette couleur car cette variable sera une variable de class.

Pour le coup comme c’est une variable de class on doit utiliser une méthode de class pour changer la couleur des robots à la volée.

Modifier à l’aide d’une méthode d’instance une variable d’instance « couleur » sur Totor n’influe que sur Totor (This.couleur).
Modifier à l’aide d’une variable de classe la variable (static) « couleur » influe sur toutes les instances (Totor, popi et xavox).

Pour revenir dans la vraie vie c’est utile par exemple si tu dois gérer une boutique en ligne le montant de la TVA (variable) de tes produits (instances). Le montant de la TVA (static) est commune à tous tes articles.

Ainsi après les prochaines élections tu n’auras plus qu’à mettre la tva à 25% et hop tes prix serons à jour !
Bon j’espère ne pas me planter …

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: Rôle et comportement des variables statiques

Message par V.B.fod31 » 26 oct. 2016 13:03

Merci jambon14 pour ta réponse :)

Donc si je comprend bien tes explications, je remplace

"il y a une seule copie des variables d’instances par classe".
par
"il y a une seule copie des variables statiques par classe".
Les variables d'instance concernent les objets de la classe
Les variables statiques concernent la classe

Je remplace donc
"Tous les objets instances de la classe partagent la même copie. On peut accéder au contenu des variables d’instances par la classe ou par les objets instances de la classe"
Par
Tous les objets instances de la classe partagent la même copie. On peut accéder au contenu des variables statiques par la classe ou par les objets instances de la classe.
Ce qui veut dire (en reprenant ton exemple) que si couleur est statique, un robot peut changer la couleur de tous les robots.

C'est bien ça ?

Jambon14
Messages : 23
Inscription : 25 oct. 2016 21:26

Re: Rôle et comportement des variables statiques

Message par Jambon14 » 26 oct. 2016 17:06

Re oui et non ... :)

>> Ce qui veut dire (en reprenant ton exemple) que si couleur est statique, un robot peut changer la couleur de tous les robots.

Ben non cela voudrait dire que l'objet peut modifier le patron

La variable static est une variable déclarée qu’une seule fois dans ta class (patron) et elle est commune à toute les instances/objets/robot créées.
cette variable est stockée dans ta class (patron) et non dans tes instances/objets/robot/.

Pour le coup si tu veux changer la couleur à la volée il faut utiliser une méthode de classe hors un robot avec ses méthodes de robot/ d’instance ne pourra pas changer une variable de classe. (enfin apres en programmation j'imagine qu'on peut tout faire ...mais je crois que ce n'est pas conseillé d’accéder à une variable de classe via un objet de la classe :))

J'ai peur de t’embrouiller alors je te passe ce petit lien vers ce tuto tu vas vite comprendre je pense. https://www.youtube.com/watch?v=b__km5Z ... YVfzLMtCKH

Jean

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: Rôle et comportement des variables statiques

Message par V.B.fod31 » 26 oct. 2016 18:28

Merci :)

eric.soutil
Messages : 16
Inscription : 21 oct. 2016 17:47

Re: Rôle et comportement des variables statiques

Message par eric.soutil » 26 oct. 2016 20:26

Bonjour,
comme cela a été correctement indiqué, les variables de classe (champs définis avec le mot clé static dans la classe) n'existent qu'en un seul exemplaire pour toutes les instances (objets) d'une même classe. Elles servent de données globales partagées par toutes les instances (objets) d'une même classe. Si l'on veut réaliser une encapsulation correcte des données, ces variables, comme d'ailleurs celles qui ne sont pas définies en static, doivent être définies avec le mode d'accès private. A priori les variables static ont généralement vocation à être modifiées par des méthodes de classe, également définies en static. Toutefois, rien dans la syntaxe de java n'interdit qu'elles soient modifiées par un objet de la classe si elles sont déclarées en public (ce qu'il faut absolument éviter pour une conception propre), ou bien par une méthode usuelle (non static), ce qui peut avoir du sens si on veut autoriser chaque objet à pouvoir modifier la donnée globale (static) partagée par tous les objets de la classe.

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: Rôle et comportement des variables statiques

Message par V.B.fod31 » 27 oct. 2016 11:52

Merci beaucoup :)
Je résume pour m'assurer que j'ai bien tout compris :
Les variables d'instances concernent les objets de la classe, les variables static concernent la classe.

Verrouillé

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité