Propriétés des objets et des méthodes
CHAPITRE 10
208
même continuera d’exister. Toutefois, on note qu’il ne pourra être utilisé que s’il existe
encore, quelque part, une référence sur lui. Autrement dit si, comme c’est le cas ici, f a donné naissance à un objet, celui-ci ne pourra être utilisé après la sortie de la fonction que si cette
dernière a fourni une copie de la valeur de p au programme ou à une autre fonction ou méthode (par exemple, f pourrait fournir cette valeur en résultat, comme nous le verrons plus
loin).
En définitive, on voit que la gestion par référence des objets, qui correspond à ce que l’on
nomme « gestion dynamique de la mémoire », s’affranchit totalement de la notion de localité
des objets eux-mêmes ; il n’existe pas d’objets locaux, simplement des références locales.
Remarques
1 Dans les langages où les objets sont gérés par valeur, les objets locaux sont gérés comme
de simples variables. On leur alloue un emplacement (généralement sur la pile) à l’entrée
dans la fonction et on détruit l’objet à la sortie de la fonction. Ce mode de gestion s’avère
en fait très limitatif puisque seuls les objets crées dans le programme principal existent
pendant toute l’exécution. C’est ce qui explique que les langages objet disposant de la
gestion par valeur, offrent en plus un mode de gestion par référence (voir la rubrique
« Côté langages » à la fin de ce chapitre).
2 Certains langages objet disposent d’un mécanisme permettant au programmeur de
demander la libération de l’emplacement mémoire correspondant à un objet ; il s’agit là
du pendant du mécanisme de Création (réservation de l’emplacement mémoire +
appel éventuel du constructeur). Cependant, cette gestion des emplacements des objets
est souvent réalisée de façon automatique, en se basant sur l’existence ou l’inexistence
de références à un objet : on les compte et l’on parle de « comptage de références ». Le
compteur est conservé dans l’objet lui-même. Lorsque ce compteur passe à 0, l’objet
peut être détruit sans risques.
3 Certains langages disposent d’une méthode particulière nommée destructeur qui est, en
quelque sorte le pendant du constructeur. Dans ce cas, il faut bien voir qu’une telle
méthode ne peut pas être appelée directement (et qu’elle n’a rien à voir avec la
possibilité de destruction évoquée ci-dessus, pas plus que le constructeur n’avait à voir
avec l’allocation mémoire de l’objet). Il s’agit simplement d’une méthode qui se trouve
appelée avant que l’objet ne soit effectivement détruit, que cette destruction ait été
demandée explicitement si le langage l’autorise ou qu’elle ait été mise en place par
l’environnement.
3 Cas des objets transmis en paramètre
Jusqu’ici, les fonctions ou les méthodes que nous avons rencontrées ne possédaient que des
paramètres d’un type de base ou tableau. Mais il va de soi qu’il est tout à fait possible qu’un
paramètre soit de type classe. C’est cette situation que nous allons examiner ici.
CHAPITRE 10
208
même continuera d’exister. Toutefois, on note qu’il ne pourra être utilisé que s’il existe
encore, quelque part, une référence sur lui. Autrement dit si, comme c’est le cas ici, f a donné naissance à un objet, celui-ci ne pourra être utilisé après la sortie de la fonction que si cette
dernière a fourni une copie de la valeur de p au programme ou à une autre fonction ou méthode (par exemple, f pourrait fournir cette valeur en résultat, comme nous le verrons plus
loin).
En définitive, on voit que la gestion par référence des objets, qui correspond à ce que l’on
nomme « gestion dynamique de la mémoire », s’affranchit totalement de la notion de localité
des objets eux-mêmes ; il n’existe pas d’objets locaux, simplement des références locales.
Remarques
1 Dans les langages où les objets sont gérés par valeur, les objets locaux sont gérés comme
de simples variables. On leur alloue un emplacement (généralement sur la pile) à l’entrée
dans la fonction et on détruit l’objet à la sortie de la fonction. Ce mode de gestion s’avère
en fait très limitatif puisque seuls les objets crées dans le programme principal existent
pendant toute l’exécution. C’est ce qui explique que les langages objet disposant de la
gestion par valeur, offrent en plus un mode de gestion par référence (voir la rubrique
« Côté langages » à la fin de ce chapitre).
2 Certains langages objet disposent d’un mécanisme permettant au programmeur de
demander la libération de l’emplacement mémoire correspondant à un objet ; il s’agit là
du pendant du mécanisme de Création (réservation de l’emplacement mémoire +
appel éventuel du constructeur). Cependant, cette gestion des emplacements des objets
est souvent réalisée de façon automatique, en se basant sur l’existence ou l’inexistence
de références à un objet : on les compte et l’on parle de « comptage de références ». Le
compteur est conservé dans l’objet lui-même. Lorsque ce compteur passe à 0, l’objet
peut être détruit sans risques.
3 Certains langages disposent d’une méthode particulière nommée destructeur qui est, en
quelque sorte le pendant du constructeur. Dans ce cas, il faut bien voir qu’une telle
méthode ne peut pas être appelée directement (et qu’elle n’a rien à voir avec la
possibilité de destruction évoquée ci-dessus, pas plus que le constructeur n’avait à voir
avec l’allocation mémoire de l’objet). Il s’agit simplement d’une méthode qui se trouve
appelée avant que l’objet ne soit effectivement détruit, que cette destruction ait été
demandée explicitement si le langage l’autorise ou qu’elle ait été mise en place par
l’environnement.
3 Cas des objets transmis en paramètre
Jusqu’ici, les fonctions ou les méthodes que nous avons rencontrées ne possédaient que des
paramètres d’un type de base ou tableau. Mais il va de soi qu’il est tout à fait possible qu’un
paramètre soit de type classe. C’est cette situation que nous allons examiner ici.
