Cas des objets transmis en paramètre
209
3.1 Mode de transmission d’un objet en paramètre
Nous avons déjà convenu que, sauf spécification contraire, dans l’appel d’une fonction, les
paramètres d’un type de base étaient transmis par valeur, les tableaux étant transmis par référence. Ces règles s’appliqueront bien sûr aux paramètres des méthodes.
En ce qui concerne les objets transmis en paramètre à une fonction ou à une méthode, nous
conviendrons que l’on a également affaire à une transmission par valeur. Mais, il faut bien
réaliser que cette valeur est en fait une référence, de sorte que la méthode (ou la fonction)
reçoit en fait la copie de la référence à l’objet correspondant qu’elle peut donc tout à fait
modifier.
Nous vous proposons ici un exemple simple illustrant cette situation. Supposons que nous
disposions de notre classe Point habituelle, offrant notamment les méthodes affiche et
déplace. Considérons ce programme utilisant une fonction f recevant un point en
paramètre :
Point a
a := Création Point (3, 8)
f (a)
a.affiche
f (Point p)
{ p.deplace (1, 6)
}
4 14
Lors de l’entrée dans la fonction f, la valeur de a a été recopiée dans le paramètre formel p ;
la situation se présente ainsi :
A la fin de l’exécution de f, l’objet référencé simultanément par a et p a vu sa valeur modifiée par l’appel de déplace :
D’où les résultats affichés. Nous rencontrerons plus loin un exemple utilisant une méthode.
3
8
a
p
fonction f
4
14
a
p
fonction f
209
3.1 Mode de transmission d’un objet en paramètre
Nous avons déjà convenu que, sauf spécification contraire, dans l’appel d’une fonction, les
paramètres d’un type de base étaient transmis par valeur, les tableaux étant transmis par référence. Ces règles s’appliqueront bien sûr aux paramètres des méthodes.
En ce qui concerne les objets transmis en paramètre à une fonction ou à une méthode, nous
conviendrons que l’on a également affaire à une transmission par valeur. Mais, il faut bien
réaliser que cette valeur est en fait une référence, de sorte que la méthode (ou la fonction)
reçoit en fait la copie de la référence à l’objet correspondant qu’elle peut donc tout à fait
modifier.
Nous vous proposons ici un exemple simple illustrant cette situation. Supposons que nous
disposions de notre classe Point habituelle, offrant notamment les méthodes affiche et
déplace. Considérons ce programme utilisant une fonction f recevant un point en
paramètre :
Point a
a := Création Point (3, 8)
f (a)
a.affiche
f (Point p)
{ p.deplace (1, 6)
}
4 14
Lors de l’entrée dans la fonction f, la valeur de a a été recopiée dans le paramètre formel p ;
la situation se présente ainsi :
A la fin de l’exécution de f, l’objet référencé simultanément par a et p a vu sa valeur modifiée par l’appel de déplace :
D’où les résultats affichés. Nous rencontrerons plus loin un exemple utilisant une méthode.
3
8
a
p
fonction f
4
14
a
p
fonction f
