How to implement a Proxy

Hans-Martin Mosner hmm at heeg.de
Fri Sep 28 07:21:49 UTC 2007


Colin Putney schrieb:
>
> On Sep 27, 2007, at 9:46 PM, Alejandro Martínez wrote:
>
>> I was thinking about implementing a Proxy but instead the usual way
>> which I believe is subclassing from ProtoObject, I subclassed from
>> Object a ProxyObject with an iVar called encapsulatedObject, and then
>> write
>>
>> ProxyObject >>doesNotUnderstand: aMessage
>>     ^aMessage sendTo: self encapsulatedObject
>>
>> Then for every message I need to intercept, I write:
>>
>> ProxyObject >>at: index put: value
>>     ^self doesNotUnderstand: (Message selector: #at:put:
>>                                                          arguments:
>> (Array with: index with: value)).
>
> There's no need to do this kind of thing. If your ProxyObject class
> doesn't implement #at:put: the VM will create the Message object for
> you and send #doesNotUnderstand: to your proxy. You only need to
> implement the messages you *don't* want forwarded.
>
> Colin
>
>
>
That's not correct in his situation - since #at:put: is implemented in
the superclass (Object) it will be used. Your approach works only if he
subclasses from ProtoObject.
Alejandro, the information you got from Stephane's book is probably a
bit outdated (we would have done it that way in the old days). The
ProtoObject approach is cleaner since ProtoObject implements only those
messages which are considered necessary in any object in the system.
Looking at it in the browser, I think it still implements too much, so
you still would have to implement some messages in your ProxyObject.

Cheers,
Hans-Martin



More information about the Squeak-dev mailing list