Whee!

Noury Bouraqadi bouraqadi at ensm-douai.fr
Tue May 20 12:18:40 UTC 2003


Hi Dominic,

You can play with MetaclassTalk 
(http://csl.ensm-douai.fr/MetaclassTalk). It provides a running MOP 
that enhances Squeak reflective facilities. So, you can  have a 
meta-object that controls how instance variables reads and write are 
done for an arbitrary set of objects, control message sends/reception, 
method look-up and evaluation...

Noury

Dominic Fox a écrit:
> OK, now this is quite fun.
> 
> Part of my interest in Smalltalk has to do with a more general curiosity about 
> what happens when you add things like reflection and metaclasses to an object 
> oriented system (or don't take them away in the first place). This is one of 
> the things I find myself missing when I'm coding in VB. I like the fact that 
> in Python, for instance, it's trivially easy to create an object that acts as 
> a facade for any other objects you tell it to: you just intercept messages 
> sent to that object using __setattr__ and __getattr__, and pass them on to 
> the first of the sub-objects that can receive them (or to all of them, one 
> after another, possibly sequencing their return values into a list or tuple). 
> Such an object would act as a kind of dynamic proxy; and of course you can 
> start intercepting those method calls and hooking all sorts of side-effects 
> up to them as well, if you want to.
> 
> So far, in Smalltalk, I have a class "Interceptor" with a private variable 
> "log" that's initialized to be a Bag. Interceptor has a method "intercept:" 
> which looks like this:
> 
> intercept: aBlock
> 	^ [message: |
> 	self log add: message.
> 	aBlock value: message]
> 
> You pass in a block (that takes a single parameter) and get a block back that 
> does the same thing, except that Interceptor logs the parameter that was 
> passed to it. Now for an object foo with a method bar, we can create a block 
> that passes a message to foo's bar, and intercept *that*:
> 
> interceptedFooBar := myInterceptor intercept: [:message | foo bar: message]
> 
> and so on ad nauseam.
> 
> Is there, in fact, a Smalltalk equivalent to __getattr__/__setattr__? If not, 
> how do you do dynamic proxies (e.g. proxies that don't know until you tell 
> them what they're proxies for)?
> 
> Dominic
> 
> 
> 


-- 
------------------------------------------
Dr. Noury Bouraqadi - Enseignant/Chercheur
Ecole des Mines de Douai - Dept. G.I.P
http://csl.ensm-douai.fr/noury

European Smalltalk Users Group
http://www.esug.org

Squeak, an Open Source Smalltalk
http://www.squeak.org
------------------------------------------




More information about the Squeak-dev mailing list