[Squeak-ev] Schleifen und Skriptunterbrechung

Markus Schlager m.slg at gmx.de
Don Dez 15 22:15:20 UTC 2005


Liebe Squeaker,

Tweak ist leider noch nicht so weit, wie ich es mir wünschen würde, und so
stehe ich immer noch vor dem Problem, so etwas wie Zaehlschleifen und bedingte
Wiederholungen in eToys zu benötigen, wenn ich ab Februar Squeak im
Informatikunterricht einsetzen möchte. 

Ich habe durchaus verstanden, daß diese imperativen Konzepte nicht so ganz im
objektorientierten Sinne der eToys sein mögen, aber Lehrplan ist Lehrplan und
so ganz unsinnig ist es dann ja auch wieder nicht, diese Konzepte
kennenzulernen (Zielgruppe sind bei mir Siebtklässler, die schon etwas über
Kalssen, Objekte, Nachrichten und Methoden gelernt haben und nun in die
Ablaufmodellierung einsteigen sollen. Grob gesagt möchte ich mit Squeak das
machen können, was z.B. Robot Karol bietet). 

Die Grundidee, an der ich momentan herumzubasteln versuche, ist letztlich eine
Klasse 'Schleifenblock', realisiert in eToys als ein Behälter-Morph, das als
Objektlager Zuweisungskacheln für seine eigenen Variablen enthält (sowie
evtl. deren Beobachter). Die Variablen sind das Objekt, dem der Schleifenblock
dienen soll, die Schleifenzahl bzw. -bedingung sowie das Skript, das in der
Schleife ausgeführt werden soll.

In einer Vorversion (noch ohne eigene Schleifenblock-klasse) z.B. zum Zeichnen
von Vielecken sieht das etwa so aus:

+++++++++++++++++++++++++++++++++
zaehlschleife
	self getSchleifenzaehler > 0 ~~ false
	     ifTrue: [self doScript: self getSchleifenskript.
			   self setSchleifenzaehler: self getSchleifenzaehler
	- 1]
	  ifFalse: [self stopScript: #zaehlschleife]

machZaehlerMal: t1 
		self setSchleifenskript: t1.
		self startScript: #zaehlschleife

schritt
	self forward: 50.
	self turn: 36

weg
	self setSchleifenzaehler: 10.
	self machZaehlerMal: #schritt
++++++++++++++++++++++++++++++++++

Das läuft soweit ja auch ganz schön. Daß der Schleifeninhalt ein
eigenständiges Skript ist (schritt), stört mich nicht gar zu sehr und hat
didaktisch durchaus auch gute Seiten.

Mein echtes Problem tritt in dem Moment auf, in dem im Hauptprogramm 'weg' vor
und nach der Schleife mit den zehn Schritten noch andere Dinge passieren
sollen, etwa weil das MorphObjekt ein Muster aus solchen Zehnecken zeichnen
soll (wobei ich gerne zusehen können möchte, wie die Zehnecke Seite für Seite
gezeichnet werden - als extreme Notlösung, bei der so ein Zehneck dann auf
einmal da wäre, habe ich bei den Spaniern schon einen Patch für ein
TimesRepeatTile gefunden).

Konkretes Bsp:

+++++++++++++++++++++++++++++++
langerWeg
	self forward: 100.		
	self setSchleifenzaehler: 10.
	self machZaehlerMal: #schritt.
	self forward: 200.
	self turn: 20
+++++++++++++++++++++++++++++++

Das führt dazu, daß die 'forward: 200' parallel zu den zehn Schritten
ausgeführt werden anstatt erst im Anschluß.

Daher die Frage: Gibt es eine Möglichkeit, das Skript 'langerWeg' anzuhalten,
sobald die Zehnerschleife beginnt, und es im Anschluß daran _beginnend mit der
Zeile 'self forward: 200'_ wieder zu starten? Oder läßt mir der
Step-Mechanismus hier keine Chance?

Und weil ich schon einmal am Fragen bin: Weiß jemand von euch zufällig, ob ich
größere Komplikationen zu erwarten habe, wenn das squeakland-Image ohne ein
secure-Verzeichnis laufen soll? (So ganz habe ich Sinn, Zweck und
Funktionsweise des Security-Systems noch nicht verstanden. Wozu sind die
Schlüssel gut, solange ich nicht mit Nebraska, Netmorphs oder solchen Dingen
arbeite?) 

Hintergrund der Frage ist der, daß ich mit schreibgeschützten,
rechnerbezogenen Images arbeiten möchte und wir inzwischen ein
MultiSeat-System aufgezogen haben, bei dem vier Benutzer gleichzeitig an ein
und demselben PC und folglich in der einfachsten Variante auch gleichzeitig
mit ein und demselben Image arbeiten (alles unter ubuntu-Linux). Erste
Testläufe zeigen, daß das auch zu gehen scheint. Die USERDIR-Umgebungsvariable
leistet mir dabei gute Dienste. Für das Secure-Dir gibt es so etwas leider
(noch?) nicht, was mich vor die Wahl stellt, entweder das secure-Verzeichnis
im Grunde einfach zu streichen oder aber die Schreibrechte auszuweiten. Was
ist schlimmer? 

Schöne Grüße

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