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