Frage

ich neu in OOP, aber mit einem "prozedurale" Hintergrund.

Ich versuche zur Zeit, meinen Kopf um OOP über GNU Smalltalk und Lovejoys „Smalltalk: Die Botschaft“ zu erhalten.

Ich bin in Bezug auf die das Heck verwirrt die Metaklasse und Metaclass Klasse sind, vs geordneten Klasse. Ich kann das Erbe Fluss Super siehe -> Klasse -> Unterklasse; aber ich sehe nicht, wie / wo metaclass paßt. TIA ...

War es hilfreich?

Lösung

Es gibt eine ausgezeichnete Beschreibung in dem freien Online-Buch Pharo von Beispiel , Kapitel 13 (Klassen und metaclasses) . Die Dinge, erklärt in diesem Kapitel sind für alle Smalltalk-Implementierungen.

Andere Tipps

Es gibt zwei Ebenen der Vererbung. B. Vererbung und Klassenvererbung

Smalltalk hat eine Sonderregelung, die es möglich passieren um Klassen als Objekte macht. Das bedeutet Klassen sind auch Objekte in ihren eigenen Rechten. Die Metaklasse ist „einfach“ die Klasse des Klassenobjekts.

Es stört nicht mit normaler Instanz Vererbung, so paßt es nicht überall in dem superclass -> class -> subclass Diagramm Sie verwendet hat.

Es gibt zwei unterschiedliche Beziehungen in klassenbasierten OO. Instanziierung und Erbe

Instanziierung ist die Beziehung zwischen einem Objekt und seiner Klasse , die new Schlüsselwort, etc. In der Regel durch einen Zeiger in der Low-Level-Darstellung eines Objekts implementiert es. In Smalltalk, quert anObject class diesen Zeiger; es kommt auch vor, dass Klassen werden auch Objekte und Klassen von Klassen metaclasses genannt werden, aber dies ist das gleiche Verhältnis wie bei Instanzen.

Vererbung ist eine Beziehung zwischen den Klassen . Sie können aus einer Klasse zu seiner übergeordneten Klasse gehen von aClass superclass tun, und halten Sie dabei, bis Sie auf die Klasse Object bekommen. In Smalltalk ist die Super Zeiger nur eine Instanz-Variable auf alle Klassen definiert, und die superclass Nachricht ist eine normale Accessor.

Als Konzept ein superclass ist die Mutter eines Klasse des Objekts. das heißt, die Klasse einer Ebene höher in der Klassenhierarchie ist als die Klasse des aktuellen Objekts.

Als benannte Methode, gibt er den Namen der unmittelbaren Oberklasse des Empfängers. z.B. es definedin Squeak Smalltalk (und auch in seinen Derivaten, Pharo und Cuis) als superclass "Answer the receiver's superclass, a Class." ^superclass

In Dolphin Smalltalk, es ist definiert als `Super     „Antwort ein, die der Empfänger der unmittelbaren     Super (oder wenn keine). "

^superclass'

Aber - jede Klasse in der Klassenhierarchie ist eigentlich eine Instanz seiner Elternklasse. So ist die Klasse, dass eine gegebene Klasse ist eine Instanz, die MetaClass der Klasse.

So, zum Beispiel aSortedCollection ist ein Ziel -. eine Instanz der Klasse SortedCollection

SortedCollection ist ein Klasse - namens Class 'SortedCollection' in der durchsuchbaren Klassenhierarchie. Gleichzeitig ist es auch eine Instanz einer Metaklasse - eine anonyme Klasse, die eine Singleton-Objekt-Instanz hat, die eine benannte Klasse ist. Die genannte Klasse ist sichtbar in der Klassenhierarchie, aber die Metaklasse (wobei anonym) ist viel weniger sichtbar. Es ist dort, so dass Smalltalk

Smalltalk hält eine Metaklasse Hierarchie, das heißt eine Hierarchie von der Klasse der Klassen. Es ist viel weniger sichtbar, da sie als anonyme Systemobjekte gehalten ist, aber man kann die oberste Ebene der Metaclass Hierarchie im Klassenbrowser finden. Sowohl die Klasse Class und die Klasse Metaclass sind als Unterunterklassen der Klasse Behaviour, selbst eine Unterklasse der Klasse Object gefunden werden.

Ein Grund dafür, dass die Leute sagen, dass „In Smalltalk, alles ist ein Objekt“ ist, weil die Klasse Object ist die Wurzel aller anderen Klassen und Objekte - es an der sehr Spitze der Objekthierarchie, die die Klassenhierarchie enthält, und die Metaklasse Hierarchie.

(Es ist im Allgemeinen in diesem Stadium, dass mein Gehirn zu bluten aus meinen Ohren beginnt, aber th folgende drei Punkte helfen Push alles zurück in meinen Schädel)

Wenn Sie die Nachricht anInstanceOfAClass class senden - Sie erhalten
die Klasse des Objekts anInstanceOfAClass zurückgegeben.

Wenn Sie die Nachricht anInstanceOfAClass class superclass senden - Sie erhalten
die Elternklasse der Klasse des Objekts anInstanceOfAClass zurückgegeben.

Wenn Sie die Nachricht anInstanceOfAClass class class senden - Sie erhalten die anonyme Singleton Metaclass der Klasse des Objekts anInstanceOfAClass zurückgegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top