[Squeak-ev] Unterklassen von eToys-Morphen

Markus Schlager m.slg at gmx.de
Die Mai 15 21:14:47 UTC 2007


Liebe Squeaker,

In den Halos von Morphen findet sich die Option, eine Unterklasse
anzulegen. Kann die eigentlich mehr, als nur ein leeres Klassengerüst mit
der einzigen Konkretisierung 'Ich bin eine Unterklasse von ...' erzeugen?

Konkret:

Bsp. 1

Ich hätte gerne eine Unterklasse #SchwererBall von EllipseMorph.  
Schwere Bälle sollen zum einen Instanzvariablen 'masse geschwindigkeit'
besitzen, zum anderen aber vor allem Kreise mit einem fetzigen Farbverlauf
als Füllung sein.

Was ich nun gern tun würde: Ich hole mir aus der Lager-Klappe eine
Ellipse, passe ihr Aussehen über die Halos an (die Luxusfassung wäre
evtl. noch die, ihr auch via Halos Variablen 'masse' und 'geschwindigkeit'
zu verpassen - daß diese Variablen dem Player zugeschlagen werden und
nicht dem Morph, habe ich schon entdeckt)  und erzeuge nun (per 1-Klick)
die gewünschte Unterklasse von EllipseMorph, bei der die Standardwerte
(etwa die Farbfüllung) für neue Instanzen genau auf die aktuellen Werte
meines gerade gebastelten Prototypen sind.

Bsp. 2

Auch wieder per eToys klicke ich mir z.B. mit Hilfe von Behältern ein
strukturiertes Widget (etwa mit mehreren Knöpfen und Textfeldern)  
zusammen. Für genau so ein Widget hätte ich nun gerne eine Klasse, aus
der ich weitere derartige Widgets instanzieren kann.

Gibt es für so etwas einen einfachen Weg? Stichworte, auf die ich bislang
gestoßen bin, sind Object>>veryDeepCopy sowie MorphicModel>>class
prototype:. Allerdings ist mir nicht ganz klar, wie man die Klasse
MorphicModel wirklich benutzt. Ist sie überhaupt die richtige für mein
Problem?

Hintergrund/Anlaß meiner Frage:

Meine Schüler sollen physikalische Simulationen programmieren und mir
ihre Werke via Monticello zugänglich machen. Die Konstruktion von GUIs
rein aus dem Quelltext heraus möchte ich ihnen gerne ersparen. Die
Projekte sollten über ein MeineGenialeSimaulation>>new oder
vergleichbares zu starten sein (sprich z.B. Erzeugung aller nötigen
Widgets).

Geht das, was ich hier will, und auch im Prinzip so, wie ich es mir
vorstelle?

Schöne Grüße

Markus

-----------------------------------------------
 Markus Schlager               m.slg(at)gmx.de