Uber-newbie: I wrote my first object!

Stephane Ducasse ducasse at iam.unibe.ch
Sun Feb 9 08:34:07 UTC 2003

Quite funny :)

now some feedback.
I'm not sure you need self into initialize. You can just say self 
startStepping. self step will be called automatically then.

something more important.

This is rare that you have to subclass collection or string. Here I 
would move all the string related methods (that are not in fact related 
to string) into your morph object.

Try to understand the difference between subclass (an object is nearly 
the same as another one) and aggregation (an object is composed of 
another one). Here your morph is composed of a collection of predefined 
insults. But see my next point.

Now the array of strings are created ***all*** the time you create a 
new sentence, which is a bit costly because you create them and throw 
them away all the time. The solution is to use a classVariable

BorderedStringMorph subclass: #InsultMorph
	instanceVariableNames: ' '
	classVariableNames: 'Adj13 Noun2 Noun4 Noun5'
	poolDictionaries: ''
	category: 'insults'

Then to initialize them

InsultMorph class>>initialize
	super initialize. "Skip this note in a first reading. normally you do 
not do that automatically because we should not invoke Object 
class>>initialize so one class should not call the superclass 
initialize method, here Morph does not invoke it so this is ok. On the 
instance side this is not the same, you normally always invoke the 
superclass initialize instance side methods."

	Adj13 := #('abject' 'abnormal'....)
	Noun2 := ...
	Noun4 :=
	Noun5 :=

In fact I would write it

InsultMorph class>>initialize

	super initialize.
	self initializeAdj13
	self initialize Noun2 := ...
	self initialize Noun4 :=
	self initialize Noun5 :=

InsultMorph class>>initializeAdj13

	Adj13 := #('abject' 'abnormal'....)


Then you can access for your instance side methods by simply typing the 
name of the variable.

	"Generate a fresh insult from the wordlists"

	^ Adj13 atRandom , ' ' , Noun2 atRandom , ' ' , Adj13 atRandom , ' ' , 
Noun4 atRandom , ' ' , Noun5 atRandom , '!!' .! !

After coding, you have to call the initialize method InsultMorph 

A classVariable is initialized normally at load time. Save the file and 
look at the end you should see InsultMorph initialize.

I suggest you to read the freebook Smalltalk by Example which is 
available on my web page.



On Sunday, February 9, 2003, at 06:01 AM, Glenn Alexander wrote:

> Hi,
> I'm very new to this.
> I wrote a little morphic object and I have put it at:
> http://www.shoalhaven.net.au/~glenalec/squeak/insults.st
> It is actually two objects as I thought it might be a good idea to
> split the string generation from the display morph so it is more
> re-usable.
> If anyone wants to give me some constructive criticism on my
> programming, it would be welcome! They are VERY small objects. If I
> get the code looking like an example of good programming, I can write
> a short tutorial on how I did it, if people think that's useful for
> other newbies.
> Thanx,
> Glenn Alexander
> glenalec(at)shoalhaven.net.au
> (As the network here is down, I'm on 28k dialup for a while, so i have
> turned off list mailings, but I will periodically check the archives
> and you can mail me direct if you like. Hopefully I'll be back online
> properly in a few days, but a few weeks is quite possible!)
> --------------------------------------------------------
> Glenn Alexander - The man with no surname and a silly hat.
> (B.Teach, B.Ed Major IT Education, University of Wollongong Australia)
> http://www.shoalhaven.net.au/~glenalec
Prof. Dr. Stéphane DUCASSE (ducasse at iam.unibe.ch) 
  "if you knew today was your last day on earth, what would you do
  different? ... especially if, by doing something different, today
  might not be your last day on earth" Calvin&Hobbes

More information about the Squeak-dev mailing list