[Newbies] Re: Collection subclasses

nicolas cellier ncellier at ifrance.com
Thu Apr 3 19:47:53 UTC 2008

Rob Rothwell a écrit :
> If I create a simple object subclassed from Collection, 
> SequenceableCollection, or ArrayedCollection called CollectionObject, with
> CollectionObject>>#initialize
>      self halt.
> and execute:
> CollectionObject new.
> the halt is executed.
> Whereas, if I subclass CollectionObject from:
> Set
> Dictionary

If you examine the protocol of these classes, you will see that they use 
an #initialize: with an argument instead.

Look on the class side methods:

Set class>>new: nElements
	"Create a Set large enough to hold nElements without growing"
	^ self basicNew initialize: (self sizeFor: nElements)

> OrderedCollection

Yet another implementation of new: ... basicNew setCollection:

> Array

No extra initialization at all performed by default (it's a deliberate 

> It does not.
> Is one not supposed to make subclasses of these classes, and if so, why not?
> I have an object that is most naturally a Dictionary-like object with 
> various subclasses, but I can not initialize it...

Nothing prevents you to define

MyClass class>>new: n
	^self basicNew initialize: n

Or the message you want...
But yes, initialize is NOT always sent upon instance creation.

> Thank you; I feel I am missing something very basic in my understanding!
> Rob Rothwell

You can of course create your own subclass (only SmallInteger is really 
hardly subclassable if I remember).

Whether or not you should do it is another question...


More information about the Beginners mailing list