Thread Ein paar Programmiertricks (39 answers)
Opened by roooot at 2008-03-22 23:16

murphy
 2008-03-24 16:22
#107428 #107428
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
KurtZ+2008-03-24 13:53:11--
[...] Tatsächlich? meine Recherche dazu zählt Smalltalk nicht zu den Prototypischen. [...]


Da hast Du wohl recht. Da sich meine Smalltalkerfahrung auf zwei Tage herumspielen mit Squeak beschränkt, wo zumindest ein Teil der Bibliothek einen prototypenbasierten Ansatz verfolgt, habe ich das durcheinander gebracht. Tut mir leid.

Quote
[...] Es ist mittlerweile üblich prototypische OO als "Classless" zu bezeichnen. aber die Leute die solche Kriterien herausarbeiten arbeiten IMHO vorwiegend mit statischen Compilersprachen, z.B. kann ich in Perl sehr wohl eine Klasse während der Laufzeit manipulieren ("kann" ne "sollte" !). Auch sind viele Design Patterns in Perl überflüssig. [...]


Dass man heute durch die Große Verbreitung von Java und Konsorten einen etwas gefärbten Blickwinkel auf Objektorientierung hat, sehe ich auch so. Und dass das Objektmodell, wie man es von Java kennt, der Weisheit letzter Schluss ist, würde ich auch bestreiten ;-)

Was Du über die Veränderbarkeit des Codes zur Laufzeit schreibst ist für mich aber eigentlich ein Merkmal einer dynamischen Sprache und weniger eine Eigenschaft des Objektmodells. Den Unterschied zwischen dem klassen- und dem prototypenbasierten Ansatz würde ich hier darin sehen, dass man zum Beispiel in Perl zwar die Methoden eines Paketes zur Laufzeit verändern kann, damit dann aber gleich alle Objekte verändert, die mit dem Paket geblesst wurden, während man in JavaScript auch lokal für ein einzelnes Objekt die Methoden ändern kann.

Die Grenze wird jedoch verwischt, sobald eine Sprache auch Methoden auf Singletontypen definieren kann (wie z.B. Dylan) oder wenn man einfach Closures oder Funktionspointer in einer Instanzvariablen speichert.

Quote
Mein Verständnis ist das ein "Objekt" eine Struktur ist die Daten und Methoden kaspelt. [3]
Eine "Klasse" ist zum einen eine Menge von Objekten die sich aus der Konstruktion aus einem Vorlageobjekt ergeben zum anderen die Bezeichnung des Vorlageobjekts (als Repräsentanten o. Erzeuger der Klasse).
Die einzelnen Mitglieder einer Klasse heißen "Exemplare" oder "Instanz" [1]


Bei dieser Betrachtungsweise würde ich sagen, der wesentliche Unterschied zwischen einem klassen- und einem prototypenbasierten Ansatz ist der folgende: Ein klassenbasiertes Objektsystem repräsentiert die Mengen von Objekten selbst explizit als Objekte, nämlich als Klassen, und speichert meist in jedem Objekt, das Element solch einer Menge ist, eine Referenz auf die Menge. Ein prototypenbasiertes Objektsystem hingegen fasst die Mengen von Objekten als Äquivalenzklassen auf, die implizit durch einen ihrer Repräsentanten beschrieben werden können, weshalb jedes Objekt, das Element solch einer Menge ist, eine Referenz auf irgendeinen Repräsentanten der mengentypischen Eigenschaften hat, den Prototypen, welcher aber nicht eindeutig bestimmt sein muss, da eine eindeutige Repräsentation der Menge selbst nicht existiert.

Quote
[...] In der Mathematik ist es auch durchaus üblich "Klassen" zu schachteln, da kann sehr wohl das Exemplar der einen Oberklasse der Repräsentant (d.h. hier Prototyp,Singletonklasse) einer Unterklasse sein. [...] Randbemerkung: Klassen sind mathematisch AFAIK Mengen die sich nicht selbst enthalten dürfen, z.B. sowas wie die "Menge aller nichtleeren Mengen" würde sonst viele Mathemodelle kaputt machen, deswegen Klassen. [...]


Also meines Wissens ist das etwas anders: In der klassischen Mengenlehre ist eine Klasse jedes Objekt dass durch ein beliebiges Prädikat auf seinen Elementen definiert ist. Insbesondere kann sich eine Klasse auch ohne weiteres selbst enthalten. Mengen hingegen sind Klassen, die zusätzlich die Zermelo-Fraenkel-Axiome erfüllen. Mengen können sich trotzdem selbst enthalten, aber bei bestimmten komischen Konstruktionen der Art "die Klasse aller Mengen, die xyz erfüllen" kommen eben keine Mengen, sondern echte Klassen heraus. Beispiele für solche echten Klassen sind die Klasse aller Mengen, die sich nicht selbst enthalten, oder die Klasse aller Mengen, die genau sich selbst enthalten.

Da eine Klasse aber praktisch keine Voraussetzungen erfüllen muss, kann bzw. darf man über die Eigenschaften einer echten Klasse im Allgemeinen wenig aussagen :-)
When C++ is your hammer, every problem looks like your thumb.

View full thread Ein paar Programmiertricks