i nouveau à OOP, mais avec un arrière-plan "procédural". P>
Je tente actuellement de me mettre la tête autour de OOP via GNU SmallTalk et de Lovejoy's "Smalltalk: Obtenir le message". P>
Je suis confus quant au diable La classe de métaclasse et de métaclass est, vs Superclass. Je peux voir le flux d'héritage de Superclass -> Classe -> Sous-classe; Mais je ne vois pas comment / où la métaclasse s'adapte. Tia ... p>
4 Réponses :
Il y a en fait deux niveaux d'héritage: héritage d'instance et héritage de classe. P>
SmallTalk dispose d'un schéma spécial qui permet de transmettre des classes forts> comme objets. Cela signifie que classes sont également des objets forts> dans leurs propres droits. La métaclasse est "simplement" la classe de l'objet de classe. P>
Il n'interfère pas avec l'héritage normal d'instance, il ne s'intègre donc nulle part dans la SuperClass -> Classe -> Sous-classe Code> Schéma que vous avez utilisé. P>
@ Zneak -> "La métaclasse est" simplement "la classe de l'objet de la classe". Je pensais que la superclasse était "la classe de l'objet de classe". C'est vraiment ma question - quel est le diff entre la superclasse et la métaclasse?
"Il y a en fait deux niveaux d'héritage: héritage d'instance et héritage de classe". De cette formulation, je suppose que vous êtes déroutant le héritage et l'instanciation ...
C'est vraiment ce que je voulais dire. Les sous-classes peuvent remplacer ce que nous appelions des méthodes statiques dans d'autres langues.
Il y a une excellente description dans le livre en ligne gratuit Pharo par exemple , chapitre 13 (classes et métaclasses) . Les choses expliquées dans ce chapitre sont communes à toutes les implémentations SmallTalk. P>
Merci pour le lien! Semble être ce que je cherche.
Vous devriez inclure le gist du livre qui répond à cette question au lieu de simplement faire référence à un lien. Une fois que ce lien est cassé, cette réponse ne devient plus utile
Il y a deux héritage strong> est une relation entre les classes em>. Vous pouvez passer d'une classe à sa superclasse en faisant nouveau code>, etc., il est habituellement mis en œuvre par un pointeur dans le bas une représentation de nombril de tout objet. Dans SmallTalk,
Classe AnoObject code> traverse ce pointeur; Il arrive également que des classes sont également des objets et des classes de classes sont appelées métaclasses, mais c'est la même relation que avec des instances. P>
alcuture superclass code>, et continuez de le faire jusqu'à ce que vous arriviez à la classe
objet code>. Dans SmallTalk, le pointeur de Superclass n'est qu'une variable d'instance définie sur toutes les classes et le message
Superclass code> est un accesseur normal. P>
comme concept, un comme méthode nommée, il renvoie le nom de la superclasse immédiate du récepteur.
par exemple. Il est défini dans Smalltalk (et aussi dans ses dérivés, Pharo et Cuis).
en dauphin smalltalk, il est défini comme
`Superclass
"Répondre à A qui est immédiat du récepteur
Superclass (ou si aucun). " p> mais - chaque classe de la hiérarchie de la classe est en fait une instance de sa classe mère. Donc, la classe qu'une classe donnée est une instance de, est la métaclasse de la classe. P> donc, par exemple
ASORTEDCollection est un objet - une instance de la classe triéeCollection. p> SoyedCollection est une classe nommée de catégorie "triée collection" dans la hiérarchie de classe navigable. Simultanément, il est aussi em> une instance d'une métaclass - une classe anonyme qui possède une instance d'objet Singleton, qui est une classe nommée. La classe nommée est visible dans la hiérarchie de la classe, mais la métaclasse (être anonyme) est beaucoup moins visible. Il est là pour que SmallTalk P> SmallTalk maintient une hiérarchie de métaclasse, c'est-à-dire une hiérarchie des classes des classes. Il est beaucoup moins visible, car il est détenu sous forme d'objets système anonyme, mais vous pouvez trouver le niveau supérieur de la hiérarchie de la métaclasse dans le navigateur de classe. La classe une raison pour laquelle les gens disent que "dans SmallTalk, tout est un objet" est parce que la classe (C'est généralement à ce stade que mon cerveau commence à purger de mes oreilles, mais les 3 points suivants aident à la repasser jusqu'à mon crâne) p> Si vous envoyez le Message Si vous envoyez le message Si vous envoyez le message Superclass code> est le parent de la classe d'un objet. C'est-à-dire le niveau de classe unique plus élevé dans la hiérarchie de la classe que la classe de l'objet actuel.
Superclass
"Répondre à la superclasse du récepteur, une classe."
^ Superclass code> p>
classe code> et la classe
métaclass code> se trouve sous forme de sous-sous-classes de classe
comportement code>, elle-même une sous-classe de classe
objet code>. p>
objet code> est la racine de toutes les autres classes et objets - c'est au top très de la hiérarchie de l'objet, qui contient la hiérarchie de la classe et la hiérarchie de la métaclasse. p>
aninstanceofaclass Classe Code> - Vous serez
La classe de l'objet aninstance de laofaclass est retournée. P> AninstanceClass Class Superclass Code> - Vous obtiendrez
La classe parent de la classe de l'objet aninstance-revass est retournée. p> aninstance de classe de classe code> - vous obtiendrez
La métaclasse de Singleton anonyme de la classe de l'objet AninstanceDaclass est retournée. P> P>