Hola, este es un curso muy avanzado.
Nos centraremos en como Pharo organiza clases
y relaciones de instancia entre clases
Está realmente dirigido a los entusiastas.
No es esencial dominar, ya que ya usas a Pharo sin él.
Puedes usar Pharo para programar sin saber cómo funciona.
Pero puede estar insatisfecho si el curso No explicó cómo funciona.
Como explicar dónde se define "nuevo"
o cuál es la clase de una metaclase.
Este video explicará todo esto.
No importa Si no entiendes inmediatamente.
Pero si realmente te interesa,
Puedes verlo varias veces.
Hay una clave fundamental aquí.
Es un aspecto divertido, que esta transparencia debería explicar.
La idea básica,
que seguimos reiterando en este MOOC,
Es que, como debe saber, cuando enviamos un mensaje a un objeto,
buscamos en la clase del objeto a través del enlace de instanciación.
Si no está allí, Seguimos la cadena de herencia.
Siempre comenzamos en la clase, luego sigue la cadena de la herencia.
Esta regla debe seguirse sistemáticamente.
Para explicar metaclases,
los resumimos en siete puntos, que son relativamente simples
Cada objeto es una instancia de una clase.
¡Eso es difícil! Mira este ejemplo.
El objeto OrderedCollection Es una instancia de esta clase.
Hasta ahora, está claro.
El segundo punto es que cada clase hereda de la clase Object.
Como vemos aquí,
Colección ordenada y hacia arriba Heredar en última instancia de Object.
Solo una nota para los francófonos,
"Eventualmente" significa "en última instancia".
Es confuso.
Asi que,
tenemos nuestro gráfico de herencia eso inevitablemente conduce a objeto.
¿Cuál es la responsabilidad de Object? Representa el comportamiento del objeto
común a todos los objetos, como el manejo de errores,
insertando un alto y anuncios.
El objeto es la raíz del árbol de la herencia.
Su responsabilidad clave es el comportamiento mínimo
Volviendo a nuestra lista, cada clase Es una instancia de una metaclase.
Lo explicamos en un curso anterior.
Una clase X es la única instancia de la metaclase denominada clase X.
Vemos que la clase OrderedCollection
es una instancia de la clase Clase OrderedCollection.
Funciona de la misma manera para la clase SequenceableCollection,
y la clase de objeto con la clase clase de objeto.
Todas las clases son instancias de otra metaclase,
que lleva el mismo nombre seguido de "clase".
Metaclasses se crean
automáticamente cuando creamos una clase.
Enviamos un mensaje "nuevo" a la metaclase para crear la clase.
El siguiente punto
Jerarquía de Metaclass paralela a la jerarquía de clases.
Anteriormente, explicamos eso
OrderedCollection es una instancia de su clase,
y del mismo modo para SequenceableCollection.
Ahora tenemos que especificar La relación entre los dos.
Ya que hay una herencia relación aquí, también hay una aquí.
En todos los casos.
Es por eso que decimos Son dos jerarquías paralelas.
¿Cuándo usamos esta jerarquía?
Si envío el mensaje "nuevo" a OrderedCollection,
donde busco En la clase.
Busco en cada clase si se ha definido o no "nuevo".
Al moverse hacia arriba, ¿se ha definido como "nuevo"? Si o no.
Aquí utilizamos la clave Lo mencioné al principio.
Para enviar un mensaje, comience con la clase luego sigue la cadena de la herencia.
Hasta este punto,
Puede parecer claro, pero ahora surgen otras preguntas.
¿De qué clase de objeto es una instancia?
Quizás te preguntes.
¿Y qué es la superclase? de la clase objeto?
Funciona ¿Si enviamos un mensaje a una metaclase?
O si enviamos un mensaje a lo que sea aquí?
Echemos un vistazo.
El sistema dice que cada metaclase hereda de clase,
hasta el comportamiento.
Veamos eso, y responde la primera pregunta.
La clase de objeto es una clase, por lo tanto, hereda de clase.
Clase hereda de ClassDescription and Behavior.
A diferencia de Pharo, en otros sistemas como Lisp
estos dos elementos son de una sola clase.
Pharo los divide para su reutilización.
Metaclass se puede adjuntar a descripción de clase
utilizar ClassDescription en dos casos
Vemos ese Comportamiento, que representa la esencia de una clase,
hereda de objeto.
Entonces, si envío un mensaje aquí,
viajará todo el camino hasta aquí.
Sigue el árbol de herencia desde el nivel de clase.
Ahora queremos saber donde se define "nuevo".
El método para crear instancias se define en Comportamiento.
Cuando envío el mensaje "nuevo" a OrderedCollection, ¿qué sucede?
Primero, busco en la clase.
Supongamos que "nuevo" no se redefine en la herencia,
entonces busco todas las superclases
hasta que encontremos "nuevo".
En una búsqueda, buscamos un método y ejecutarlo en el receptor.
Entonces, encuentro el método "nuevo" y ejecutarlo en el receptor,
la clase OrderedCollection, que crea una nueva instancia
que nombraremos 3 4, por ejemplo.
¿Bueno?
Estamos usando la clave de la que hablé.
Buscamos en la cadena de herencias, comenzando con la clase del receptor.
En una palabra, ¿Qué representa el comportamiento?
Es la esencia de un objeto. eso puede tener instancias
Objetos con instancias
debe incluir un enlace de superclase,
diccionario de método y descripción de instancias (formato).
Los métodos que se muestran aquí incluyen ejemplos como nuevo, básico, nuevo y nuevo :.
La diferencia entre el nuevo y el básico.
es que nunca debes redefinir basicNew.
Como explicamos en el curso de métodos,
Si redefine un método que comienza con "básico", el método es inaccesible.
El método original
Hay otras formas de acceder los métodos compilados, como se muestra aquí.
El comportamiento es la esencia de una clase.
¿Qué es ClassDescription?
Es una superclase abstracta compartido por Class y Metaclass.
Añade facilidades a Comportamiento,
como nombrar variables de instancia, ya que la ejecución de clases puede ser automática.
ClassDescription agrega estas cosas.
La organización de categoría se refiere a los métodos. en su navegador mostrando los protocolos.
Por ejemplo, un método se puede almacenar en el protocolo de impresión.
Además, la noción de un nombre.
Además del mantenimiento de los conjuntos de cambios y el guardado de los cambios en los archivos.
Puedes verlo tú mismo.
Esta categorización existe porque Class y Metaclass comparten el uso.
La responsabilidad de la clase
es representar las clases Empleamos en Pharo.
Esto incluye representación para classVariable names
y una mejor forma de nombrar y compilar elementos.
Una vez más, consulte el código.
Las clases son instancias de metaclases.
Si el objeto es una instancia de una clase denominada clase de objeto,
y del mismo modo para OrderedCollection,
lo mismo se aplica a la clase, Descripción de la clase y Comportamiento.
Entonces, Class es una instancia de Class class
y ClassDescription es una instancia de la clase ClassDescription.
Lo mismo se aplica al comportamiento.
También debemos mirar la cadena de herencias
Si hay una relación de herencia entre estos dos elementos,
existe la misma relación aquí a la derecha
Como ves aquí, podemos rastrear la cadena de herencia.
La clase de comportamiento hereda por lo tanto desde la clase de objetos.
Ahora por el segundo último punto.
Como cada clase es una instancia de una metaclase, surge una pregunta.
Qué es la clase OrderedCollection una instancia de?
Ya que todo es un objeto en Pharo.
Clase OrderedCollection es por lo tanto una instancia de Metaclass.
Clase de objeto y clase de clase son instancias de Metaclass.
Todas las metaclases en el sistema son instancias de Metaclass.
Además, Metaclass hereda de ClassDescription.
Es una clase inusual porque solo tiene una instancia.
Y no puedes nombrarlo porque su nombre está definido por su instancia.
Eso puede parecer bárbaro.
Entonces, vemos que OrderedCollection
es una instancia de OrderedCollection clase, que toma su nombre.
Todos los metaclases son instancias de Metaclass.
En el codigo, la principal responsabilidad de Metaclass
es crear e inicializar una sola instancia de sí misma.
Solo hay una pregunta a la izquierda para contestar
¿De qué se trata Metaclass?
Porque Metaclass es una clase, como OrderedCollection,
es una instancia de la clase clase Metaclass.
Verás que Metaclass hereda de ClassDescription,
por lo tanto, clase Metaclass hereda de la clase ClassDescription.
Clase OrderedCollection hereda de clase de objeto
como ordenada colección hereda de objeto.
Entonces, Metaclass es una instancia de la clase Metaclass.
OrderedCollection es una instancia de la clase OrderedCollection.
Y clase Metaclass es una instancia de Metaclass,
solo como clase de clase y clase de objeto son instancias de Metaclass.
Este ciclo puede parecer extraño, pero tiene sentido en contexto.
No necesitas esto para usar Pharo, así que siéntete libre de pasarlo por alto.
Pero como muestra este gráfico,
la clave de la que hablamos antes funciona perfectamente.
Cada vez que enviamos un mensaje a un objeto, vemos su clase
y su árbol de herencia, como se muestra en estos ejemplos.
Si envío un mensaje a esta instancia, me lleva a objeto.
Si envío un mensaje a la clase,
Voy a la metaclase y sigue la herencia.
Si envío un mensaje a una metaclase, ¿Dónde debo mirar?
En Metaclass, ya que la metaclase Es una instancia de Metaclass.
Sigo el enlace de instanciación hasta el final.
Esto es cuando un mensaje no se entiende o un método solo se define en Objeto.
Ahora, ¿qué pasa si envío un mensaje? a Metaclass mismo?
¿Dónde busco?
Primero en la clase Metaclass, luego sigo la cadena de herencia.
Entonces ... ¡vaya!
Aquí se vuelve más complicado.
De manera similar, si envío un mensaje a la clase Metaclass,
o a la clase OrderedCollection,
Miro en la instancia
de la clase Metaclass, que es Metaclass.
Al igual que para la clase OrderedCollection, Sigo este camino
Ya verás que este gráfico es completamente lógico.
No podemos tener un gráfico inconsistente
ya que la máquina virtual solo hace una cosa
Busca mensajes en la clase y sigue la cadena de herencia.
Este gráfico completo es consistente con ese proceso.
Encuentro esto emocionante porque Me lo pregunté yo mismo.
Entonces, para resumir, las clases son objetos y puede recibir mensajes
El procedimiento es el mismo para todos los objetos,
incluso si hay metaclases con una sola instancia,
que no son explícitamente nombrados.
Pero no es esencial saber eso.