Hallo Markus, Habe gerade nochmal schnell das Beschrieben umgesetzt. Vielleicht hilft es ja.
Viele Grüsse
Knut
------------------------------------------------------- Dipl.-Psych. Knut Polkehn Ingenieurpsychologie / Kognitive Ergonomie Institut für Psychologie Humboldt-Universität zu Berlin Rudower Chaussee 18 12489 Berlin ------------------------------------------------------- mailto:knut.polkehn@rz.hu-berlin.de
Tel. : +49(30)2093 9357 Mobil: +49(172)803 7387 Fax : +49(30)2093 2021 9357 WWW : http://www3.psychologie.hu-berlin.de/ingpsy -------------------------------------------------------
-----Ursprüngliche Nachricht----- Von: squeak-ev-bounces@lists.squeakfoundation.org [mailto:squeak-ev-bounces@lists.squeakfoundation.org] Im Auftrag von Markus Schlager Gesendet: Donnerstag, 15. Dezember 2005 23:15 An: e.V. Squeak Betreff: [Squeak-ev] Schleifen und Skriptunterbrechung
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