R. Baumann schrieb:
Markus Schlager:

Ich selber habe OO auch erst dank Etoys und Squeak wirklich verstanden.

Ich leider noch nicht. Im Byob-Handbuch lesen wir:

"The idea of object oriented programming is often taught in a way that makes
it seem as if a special object oriented programming language is necessary.
In fact, any language with first class procedures allows objects to be
implemented explicitly; this is a useful exercise to help demystify objects.
The central idea of this implementation is that an object is represented as
a dispatch procedure that takes a message as input and reports the
corresponding method."

Ich denke wie Enrico, das kommt aus der Ecke der funktionalen Sprachen, wenn die Objekte mit ihren eigenen Sprachmitteln implementieren ("das konnte Lisp doch schon immer...").

"Dispatch" heißt versenden auf englisch.

Zitat aus einem CLOS-Buch:-----------
Dispatching [ist ein] Begriff aus der realen Welt, der von der Computerwelt übernommen wurde. Das Dispatching beschreibt die Reaktion auf einen bestimmten Wert oder Eingabe. Man kann sich das sehr schön bildhaft in einer Postverteilstation vorstellen: Ein Postbeamter (der Verteiler), umgeben von Postsäcken. Entsprechend der Postleitzahl auf dem Päckchen oder Brief, wird es in den dafür bestimmten Sack geworfen. In CLOS sind die Postsäcke die Methoden, der Postbeamte ist der dispatcher, die Päckchen und Briefe sind die Instanzen, und die Postleitzahlen sind die Klassen, nach denen sie klassifiziert werden.
----------------------
(Paul Graham: ANSI Common Lisp)

In meinen eigenen Worten:

Die Lisp-Leute "simulieren" bzw. "implementieren" (je nach Sichtweise und Wertung) Objekte durch eine Funktion, die einen Aufruf wie

objekt tuWasMit: parameter

auch in Lisp möglich machen (an die richtige Stelle schicken), ohne eine neue Sprache zu erfinden.

Im Hintergrund müssen dafür Methoden als spezielle Funktionen definiert werden, die nur mit einem bestimmten Typ von Argument (Klasse) arbeiten, und die erst vom diapatcher aufgerufen werden. Das geht im Prinzip in allen Sprachen, wo eine Funktion als Parameter weitergereicht werden kann (first class fuction).

in Smalltalk-Syntax:

dispatcher versende: objekt anMethode: methode

Der dispatcher kann das Objekt inspizieren, erfährt dessen Klasse und findet dann die korrekte Methode.

Schöne Grüße

Christian Mascher

Antwort per Email an