L'enregistrement d'attributs qui sert à représenter en
mémoire les données d'un objet est,
pour la plupart des langages, un peu plus compliqué que celui
étudié dans la partie . En général un
enregistrement d'attributs est composé de deux parties:
une partie variable et propre à chaque objet contient
les variables d'instance; une partie fixe et partagée
par tous les objets instances d'une même classe, correspond
à une table de méthodes.
La table de méthodes est organisée comme un tableau qui contient
le code de toutes méthodes, chacune indexée par le numéro de la
méthode.
Le numéro associé à une méthode
est calculé au moment de la compilation et ne varie pas au sein
d'un même programme.
ocell |
![]() |
|
Nous supposons qu'il existe une instruction machine
SELECT(o,k) capable d'extraire
le code d'une méthode de numéro k dans la table de méthodes
de o.
Dans notre exemple, l'envoi de message ocell#get
es
compilé par l'instruction SELECT(ocell,1). La liaison
tardive est obtenu par l'appel à cet instruction lors de
l'exécution de l'envoi de message, plutôt que lors
de sa compilation.
L'envoi de messages à self est aussi compilé en une sélection
de méthode, à partir de son numéro, dans la table des méthodes
dynamiquement liée à self lors de l'exécution.
Pendant la compilation de l'héritage, les méthodes, re-définies ou non, conservent le même numéro que dans leurs classes parentes. Ceci garantît, en particulier, la re-utilisation polymorphe et sans danger pendant l'exécution, des programmes conçus pour les super-classes, par les objets instances des sous-classes. En effet, le code compilé pour ces programmes, selectionne un numéro de méthode qui correspond uniformément au même nom de méthode dans tous les enregistrements d'attributs.