Portail informatique Année 2018 – 2019

CSC 3101 – Algorithmique et langage de programmation

Vous pouvez retrouver le jeu ici. Dans quel cas f est une méthode d'instance ?
  1. int f;
  2. int f();
  3. static int f();
  4. public int f;
int f();. int f; et public int f; définissent des champs, alors que static int f(); définit une méthode de classe (et non d'instance).
Dans quel cas f est un champs ? Si o = new Truc(), alors :
  1. int f;
  2. final int f();
  3. int f();
  4. static int f();
int f;. Les autres expressions définissent des méthodes (non encore étudiée pour la première, d'instance pour la seconde et de classe pour la troisième).
Qu'affiche ce programme ?
  1. Une erreur
  2. pv: 0
  3. pv: 42
  4. pv: null
pv: 42. Comme représenté sur la figure, le paramètre this caché de f référence l'instance de Player référencée par la variable p dans le cadre de main. L'affectation pv = 42 dans main est réécrite en this.pv = 42 puisque f ne définit pas de variable locale pv. Cette affectation modifie donc la case mémoire this.pv, qui est aussi celle désignée par perso.pv dans le cadre de main.

Qu'affiche ce programme ?
  1. Une erreur
  2. pv: 0
  3. pv: 42
  4. pv: 666
pv: 0. Comme représenté sur la figure, au moment de l'appel, l'argument this cachée de f reçoit une référence vers le Player référencé par p dans main, et la variable locale pv de f reçoit 666. L'affectation pv = 42 concerne la variable pv du cadre de f et non le champ pv de this car Java utilise la portée lexicale pour trouver les symboles. Au résultat, le champ pv de p n'est donc modifié par f.

Qu'affiche ce programme ?
  1. Une erreur
  2. pv: 0
  3. pv: 42
  4. pv: 666
pv: 42. Dans l'affectation this.pv = pv, le pv de droite vaut 42. En effet, ce pv désigne la variable locale pv de f puisque Java utilise la portée lexicale. Le this.pv de gauche désigne le champ pv de this, qui est donc affecté à 42. Comme this dans f et p dans main référencent le même objet, p.pv vaut 42 après l'appel à f.