[Seaside] Question for newbie
Claus Kick
claus_kick at web.de
Fri Jan 9 16:59:02 UTC 2009
Steve Bleeke wrote:
> I read another question about a root class not showing on the configuration list for entry points even though it had a canBeRoot method.
>
> The answer was to place the canBeRoot method on the class side. What does class side mean?
>
Everything in a Smalltalk system is an object.
Every object is an instance of a class.
The instance side defines behaviour for every object instance.
The class side provides general valid behavior, like whether a component
canBeRoot for a Seaside application.
The common example is to have a Class Car, which has a class method
#needsFuel which returns true.
It has an instance method called #move: which manipulates the tank
filling of the car, decrement by moving, depending on whether an object
of class Car needs fuel or not:
Car >> move: aDistance
self class needsFuel
ifTrue:[
fuel := fuel - aDistance //10.
].
Now, you create an instance of Car.
car := Car new.
car move: 100.
So the car has moved 100 somethings, which means the tank of that car
has been depleted a bit.
Now you create a new instance of Car.
car2 := Car new.
car2 will still have a full tank.
Now, if you have a Class called "PerpetuumMobile", it is next to the
Class Car, below the same parent called "Machine". This class answers
false to #needsFuel, but has the same method #move:
PerpetuumMobile >> move: aDistance
self class needsFuel
ifTrue:[
fuel := fuel - aDistance //10.
].
So, moving an instance of PerpetuumMobile will not decrement the tank
filling.
Of course, in reality, the move: method will be implemented in the class
Machine.
I hope this does make some sense to you.
Suggested readings: Object-Oriented Programming, Polymorphism, Inheritance.
More information about the seaside
mailing list