On Fri, 29 Apr 2011, R. Baumann wrote:

Markus schrieb:

FillInTheBlankMorph finde ich insofern etwas schwierig, als man dort beim
Programmieren üblicherweise nur Klassenmethoden benutzt und eigentlich gar
keine Instanz mit eigenem Objektbezeichner erzeugt.

Das verstehe ich leider nicht. Kann man nicht ganz naiv und
klassisch-algorithmisch mittels FillInTheBlankMorph) im Workspace und mit
Transcript programmieren? Wo sind da Klassenmethoden?

Laut Methodenkommentar ist die typische Verwendung der Klasse doch die:

        FillInTheBlankMorph request: 'What is your favorite color?'

Bzw. wenn das Ergebnis weiterverarbeitet werden soll:

        antwort := FillInTheBlankMorph request: 'What is your favorite color?'

#request: ist eine Klassenmethode von FillInTheBlankMorph, die vorübergehend eine Instanz dieser Klasse erzeugt - und gleich wieder verschwinden lässt: Mit erledigter Eingabe ist auch das Eingabefenster weg. Mich hat das irritiert.

Das übliche Vorgehen sonst sieht dagegen so aus:

        objekt := Klasse new. "Aufruf des Konstruktors der Klasse"
        objekt mache: etwas.  "Nachricht an die Instanz"
bzw.
        ergebnis := objekt liefere: etwas.

In obigem Beispiel steht aber:

        Klasse mache: etwas. "Nachricht an die Klasse - als Objekt"
bzw.
        ergebnis := Klasse mache: etwas.

Ich selber hatte jedenfalls anfangs so meine Schwierigkeiten, die Funktionalität von FillInTheBlankMorph zu verstehen. Das ging schon damit los, dass ich die Methode #request: im Browser zunächst gleich gar nicht gefunden habe.

Freilich mag man einwenden, daß #new auch eine Klassenmethode ist. Praktisch bekommt man damit aber kaum zu tun, weil sich das, was man etwa in Java in den Konstruktor schreibt, in Smalltalk doch so gut wie immer in #initialize abspielt, was wieder eine Nachricht ist, die an eine frischgebackene Instanz der Klasse geschickt wird, nicht an die Klasse selbst. Meinen Schülern gegenüber bezeichne ich #initialize auch als den Konstruktor der Klasse. Darf ich das oder ist das richtig falsch?

Klassenmethoden sind, denke ich, eher fortgeschrittene Programmierkunst. Ich selber habe jedenfalls noch nicht viele programmiert.


Ab wann sind die Schüler frühestens in der Lage, Browserprogrammierung und
Begriffe wie "Klassenmethode" zu verstehen?

Für unsere Sechstkläßler ist das Konzept Objekt <-> Klasse schwierig - jedenfalls so, wie sie es laut Lehrplan lernen müssen: Anhang von Vektorgrafiken und Textdokumenten. Da läuft es dann im wesentlichen doch darauf hinaus, dass eine Klasse eine Sammlung von 'gleichartigen' (sprich gleiche Attribute und Methoden) Dingen ist. Die Idee eines Konstruktors fehlt eher. Ich weiß nicht, ob sie froh sind, wenn sie gleich noch die Klasse aller Klassen präsentiert bekommen.

Meine Zehntklässler kommen mit der Browserprogrammierung ganz gut zurecht. Einzige Gefahr: Zuweilen ziehen sie versehentlich mit der Maus Methoden von Standardklassen in ihre eigenen Klassen, statt sie zu kopieren, oder Standardklassen in andere Kategorien.

Meine Siebtklässler kommen mit Scratch gut klar. Im Grunde ist dessen Oberfläche aber auch nicht anders aufgebaut als der Systembrowser. Ein Bereich für die Klassenliste (in Scratch die Objekte), ein Bereich für die Protokolle (Bewegen, Fühlen, Operatoren...) ein Feld für die Programmierung der Methodenkörper.

Markus

Antwort per Email an