Enten-Typisierung (Duck Typing)

22/05/2015 - 10:38 von djc | Report spam
Hallo,

wenn etwas
* watschelt wie eine Ente,
* quakt wie eine Ente und
* Federn hat wie eine Ente,

==> dann könnte es durchaus eine Ente sein, so die Logik hinter Duck Typing.

Das bedeutet, daß in einem OO-System nicht zwingend Klassen notwendig sind, sondern Daten-/Objekttypen anhand ihrer Eigenschaften erkannt und zugeordnet werden können.

In Ruby z.B. geschieht dies anhand der Methoden, die ein Objekt "versteht".
Die Analogie ist nicht exakt, selbst wenn ein Objekt "watscheln" versteht, bedeutet, das noch lange nicht, daß es dann "wie eine Ente" watschelt.

Die Idee dahinter könnte aber eventuell die Verwendung von OO in Forth vereinfachen -
* Datentypen etc. sind - wie bisher in Forth - nicht zwingend
* Objekte werden charakterisiert durch ihre Fàhigkeiten (d.h. was sie können/verstehen)

MeineEnte watscheln <OK>
MeinPferd watscheln <Fehler: MeinPferd kann nicht watscheln>

Faßt man diese Fàhigkeiten in Schnittstellen (Interfaces) zusammen, so kann man z.B. die Fàhigkeiten einer Ente in einer Schnittstelle "entenartig" zusammenfassen.

Das obige Beispiel àndert sich dann wie folgt:

MeineEnte entenartig.watscheln <OK>
MeinPferd entenartig.watscheln <Fehler: MeinPferd ist nicht entenartig>

Wir sehen hier eine explizite Angabe der zu verwendenden Schnittstelle.

Zum Abschluß ein anderes Beispiel:

MeineIdee saumàßig.gut?

Viel Spaß in den Pfingstferinen wünscht
Daniel
 

Lesen sie die antworten

#1 anton
22/05/2015 - 10:57 | Warnen spam
djc writes:
Die Idee dahinter könnte aber eventuell die Verwendung von OO in Forth ve>reinfachen -
* Datentypen etc. sind - wie bisher in Forth - nicht zwingend
* Objekte werden charakterisiert durch ihre Fàhigkeiten (d.h. was sie k>önnen/verstehen)



Ja, die Benutzer von Neon und seinen Nachfolgern sehen das als grosses
Feature von Neon. Wie man das effizient implementiert:

<http://www.complang.tuwien.ac.at/an...tl.pdf>

Ui, 2012, wird Zeit, dass ich das endlich fertigmache.

Faßt man diese Fàhigkeiten in Schnittstellen (Interfaces) zusammen, so >kann man z.B. die Fàhigkeiten einer Ente in einer Schnittstelle "entenart>ig" zusammenfassen.

Das obige Beispiel àndert sich dann wie folgt:

MeineEnte entenartig.watscheln <OK>
MeinPferd entenartig.watscheln <Fehler: MeinPferd ist nicht entenartig>

Wir sehen hier eine explizite Angabe der zu verwendenden Schnittstelle.



Also den Typen im Namen der Operation zu spezifiziern ist eine
klassische Forth-Technik, aber nicht gerade Duck Typing. Ich sehe die
Einsatzbereiche wie folgt:

1) Overloading resolution: Man hat zwei grundsaetzlich verschiedene
Interfaces, z.B.

anhaenger.ziehen ( geschwindigkeit anhaenger -- )
waffe.ziehen ( waffe -- )

Hier halte ich den Forth-Ansatz (verschiedene Namen) fuer den Richtigen.

2) Man hat ein Interface (Methodenselektor) mit mehreren
Implementierungen (Methoden). Da es nur ein Methodenselektor ist,
gibt es natuerlich auch nur einen Namen. Da wuerde ich eher
"watscheln" als "entenartig.watscheln" verwenden.

- anton
M. Anton Ertl Some things have to be seen to be believed
Most things have to be believed to be seen
http://www.complang.tuwien.ac.at/anton/home.html

Ähnliche fragen