anObject changeClassTo: anObject (on a un prototype ;-) attention il faut faire d'autres changements pour que l'objet aie le format d'une classe qui lui est connu par la VM)
Migration d'instances
anOldObject become: aNewObject
tous les objets ayant une reference anOldObject, cette reference sera remplacée par aNewObject.
CompiledMethod allInstances retourne toutes les instances de la classes CompiledMethod.
Ah et comme tu peux le voir les méthodes sont des objets comme les autres on peut donc les modifier, et faire d'autre choses comme de la couverture de code (pour les tests unitaires par exemple). On remplace des méthodes par des method wrapper ils vont être appelés a la place de la méthode et ils font ensuite leur boulot et vont appeler la bonne méthode ;-)
Et encore plein d'autre choses on peut faire des variables d'instance first-class:
MaClass>>maMethod: [
des truc avants
uneIVar := '123'.
des truc apres
]
uneIVar va envoyer les messages beforeChange et afterChange (il suffit de faire un peut de reecriture)
J'oublie une chose importante le context d'exécution peut etre manipule: thisContext
On peut facilement créer un debuggeur ou implémenter les exceptions en Smalltalk.
Il y a encore plein d'autres choses comme les classe anonymes, ...
[^] # Re: réflexif
Posté par Gwenaël Casaccio . En réponse à la dépêche GNU Smalltalk 3.2.3 et VisualGST 0.8.0. Évalué à 2.
Avoir la classe d'un objet:
anObject class
appeler une methode
anObject perform: #blabla with: 123
Changer le contenu d'une variable d'instance:
anObject instVarAt: 1 put: 123
On peut aussi faire des choses amusantes:
anObject changeClassTo: anObject (on a un prototype ;-) attention il faut faire d'autres changements pour que l'objet aie le format d'une classe qui lui est connu par la VM)
Migration d'instances
anOldObject become: aNewObject
tous les objets ayant une reference anOldObject, cette reference sera remplacée par aNewObject.
CompiledMethod allInstances retourne toutes les instances de la classes CompiledMethod.
Ah et comme tu peux le voir les méthodes sont des objets comme les autres on peut donc les modifier, et faire d'autre choses comme de la couverture de code (pour les tests unitaires par exemple). On remplace des méthodes par des method wrapper ils vont être appelés a la place de la méthode et ils font ensuite leur boulot et vont appeler la bonne méthode ;-)
Et encore plein d'autre choses on peut faire des variables d'instance first-class:
MaClass>>maMethod: [
des truc avants
uneIVar := '123'.
des truc apres
]
uneIVar va envoyer les messages beforeChange et afterChange (il suffit de faire un peut de reecriture)
J'oublie une chose importante le context d'exécution peut etre manipule: thisContext
On peut facilement créer un debuggeur ou implémenter les exceptions en Smalltalk.
Il y a encore plein d'autres choses comme les classe anonymes, ...