Re: [Squeak-ev] Re: Von der Kachelprogrammierung zu Smalltalk: Begründungen?
Markus Schlager
m.slg at gmx.de
Fre Apr 29 13:48:01 UTC 2011
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