Autoréférence
221
7 Autoréférence
7.1 Généralités
Considérons l’application d’une méthode à un objet, par exemple :
a.déplace (4, 5)
Comme nous avons déjà eu l’occasion de le mentionner :
• cette méthode déplace doit recevoir une information lui permettant d’identifier l’objet
concerné (ici a), afin de pouvoir agir convenablement sur lui ;
• la transmission de cette information est prise en charge automatiquement par le traducteur.
C’est ce qui permet aux instructions de la méthode d’accéder aux attributs de l’objet sans
avoir besoin de préciser sur quel objet on agit.
Mais il peut arriver qu’au sein d’une méthode, on ait besoin de faire référence à l’objet dans
sa globalité (et non plus à chacun de ses attributs). Ce sera par exemple le cas si l’on souhaite
transmettre cet objet en paramètre d’une autre méthode. Un tel besoin pourrait apparaître
dans une méthode destinée à ajouter l’objet concerné à une liste chaînée...
Les langages objet disposent d’une notation particulière de cet « objet courant ». Ici, nous
conviendrons que le nom courant représente cet objet et qu’il s’utilise comme une variable du même type (donc comme une référence) :
classe A
{ .....
public m(...)
// méthode de la classe A
{ ..... // ici courant désigne l’objet ayant appelé la méthode
// par exemple, si f est une fonction ayant un paramètre de type A
// on pourra appeler f(courant) qui transmettra à f la référence
// de «l’objet courant» (celui sur lequel porte m)
}
}
7.2 Exemples d’utilisation de courant
À titre d’illustration du rôle de courant, voici une façon artificielle d’écrire la méthode
coincide rencontrée au paragraphe 3.2, page 210 :
booléen méthode coincide (Point pt)
{ retourne pt.x = courant.x et pt.y = courant.y
}
Notez que l’aspect symétrique du problème apparaît plus clairement.
Ce type de notation artificielle peut s’avérer pratique dans l’écriture de certains constructeurs. Par exemple, le constructeur suivant :
méthode Point(entier x, entier y)
{ abs := x
ord := y
}
221
7 Autoréférence
7.1 Généralités
Considérons l’application d’une méthode à un objet, par exemple :
a.déplace (4, 5)
Comme nous avons déjà eu l’occasion de le mentionner :
• cette méthode déplace doit recevoir une information lui permettant d’identifier l’objet
concerné (ici a), afin de pouvoir agir convenablement sur lui ;
• la transmission de cette information est prise en charge automatiquement par le traducteur.
C’est ce qui permet aux instructions de la méthode d’accéder aux attributs de l’objet sans
avoir besoin de préciser sur quel objet on agit.
Mais il peut arriver qu’au sein d’une méthode, on ait besoin de faire référence à l’objet dans
sa globalité (et non plus à chacun de ses attributs). Ce sera par exemple le cas si l’on souhaite
transmettre cet objet en paramètre d’une autre méthode. Un tel besoin pourrait apparaître
dans une méthode destinée à ajouter l’objet concerné à une liste chaînée...
Les langages objet disposent d’une notation particulière de cet « objet courant ». Ici, nous
conviendrons que le nom courant représente cet objet et qu’il s’utilise comme une variable du même type (donc comme une référence) :
classe A
{ .....
public m(...)
// méthode de la classe A
{ ..... // ici courant désigne l’objet ayant appelé la méthode
// par exemple, si f est une fonction ayant un paramètre de type A
// on pourra appeler f(courant) qui transmettra à f la référence
// de «l’objet courant» (celui sur lequel porte m)
}
}
7.2 Exemples d’utilisation de courant
À titre d’illustration du rôle de courant, voici une façon artificielle d’écrire la méthode
coincide rencontrée au paragraphe 3.2, page 210 :
booléen méthode coincide (Point pt)
{ retourne pt.x = courant.x et pt.y = courant.y
}
Notez que l’aspect symétrique du problème apparaît plus clairement.
Ce type de notation artificielle peut s’avérer pratique dans l’écriture de certains constructeurs. Par exemple, le constructeur suivant :
méthode Point(entier x, entier y)
{ abs := x
ord := y
}
