Protocol viewer ?

Ned Konz ned at bike-nomad.com
Tue Sep 25 20:30:33 UTC 2001


On Tuesday 25 September 2001 12:44 pm, Gary McGovern wrote:
> Hello Ned,
> I'm really sorry to keep this thread going and I appreciate all the effort
> put into your replies, but I feel I have to clear something up here (with
> my exam only 3 weeks away).
>
> Protocol is defined in my course as:
> A set of messages that an object understands
> now when I evaluate
> bill size
> I get an error and so obviously bill doesn't understand the message size.

No, bill understands the message "size". But it's not something that is an 
appropriate question. You get an error because it understands it but can't 
answer it.

If bill didn't understand size, you'd get a different error, one that says 
that it didn't understand it. Instead you get an error that says something 
like "is not indexable".

> And therefore size isn't part of the protocol of bill. But it is listed in
> the entire protocol of  AdvancedB3DSceneMorph.
> So I'm trying to find if size listed as part of the protocol of
> AdvancedB3DSceneMorph.
> is a flaw in the protocol browser or a flaw in the writing of the Class
> AdvancedB3DSceneMorph. This will answer to me all I need to know.

size is a rather special case. It's really only meaningful for objects of 
certain classes -- those with indexed slots (like Array, etc.). Not for 
Morphs, which are objects whose slots are all named. However, it's defined in 
Object because you can make subclasses of Object that either do or do not 
have slots. It was put there more for code re-use than because all objects 
really understand size.

So, although size is, in fact, part of the protocol of Morphs, calling it 
will result in an exception being thrown because Morphs aren't the right kind 
of object to answer size.

Chalk this one up to Smalltalk history (Dan Ingalls could say much more about 
this, I'm sure), rather than good OO design.

If this wasn't defined in Object, every time someone made a new class with 
indexed slots that inherited from a class without indexed slots (which 
doesn't happen very often) they'd have to define size in their new 
class.

Remember, Smalltalk was written back when memory was very small and 
expensive; using inheritance to share code was important. 

You could define size in Morph to return the pixel size (like extent does). 
But it would confuse Smalltalkers, who are used to thinking of size as a 
method that returns the size of a collection.

-- 
Ned Konz
currently: Stanwood, WA
email:     ned at bike-nomad.com
homepage:  http://bike-nomad.com




More information about the Squeak-dev mailing list