Hola todos. En la clase de hoy, vamos a ver
si has entendido nuestras clases anteriores
a saber, en lo que se refiere a super.
La idea es hacerte pensar mucho.
Tengo una prueba para ver si lo has entendido
¿Que aprenderás?
Pensarás en lo super súper,
revisar la búsqueda de mensajes,
y piensa en los métodos de clase.
Es mucho material para una clase, pero es divertido.
Imagine que definí un método en la clase de dados,
y redefinido el método "nuevo" de la siguiente manera:
Aquí hay "nuevo" y aquí está el código.
inst:= super nuevo
inst inicializar Devolver inst.
Ahora ejecuto la expresión dados nueva
Ahora mi pregunta para ti es:
En esta expresión, ¿qué es inst?
¿Qué es súper?
¿Y qué es súper nuevo?
Te daré unos segundos Pensarlo más.
Te daré algunas pistas.
Se basan en mi experiencia docente.
No, super no es la superclase.
Quita eso de tu cabeza
No, inst no una instancia de la superclase.
Si lo fuera, nunca podríamos escribe instancias para las clases a continuación.
¿Así que qué es lo?
Vamos a ver.
Dijimos en el video sobre super
ese super fue el receptor del mensaje
Al igual que yo, súper puntos el receptor del mensaje
Esto no es específico de Pharo.
Es cierto en todos los objetos orientados lenguajes como Java, C #,
y Smalltalk.
Aquí el mensaje es nuevo para los dados.
Entonces, ¿cuál es el receptor? Sintácticamente hablando, son los dados.
La clase es dados.
Con estas pistas, deberías entender mejor
Veamos.
¿Recuerdas cómo funciona el mensaje de búsqueda?
Envío un mensaje a una instancia,
por ejemplo, ColoredRectangle.
Miro dentro la clase ColorRectangle
para ver si el método en cuestión se define. No es.
"Área" no está definida. Lo encuentro aquí.
Aplico la definición que encontré.
¿En que? En el receptor
Ahora debes entender lo que hace este método
Busco "nuevo" en la clase de dados.
Lo busco y lo aplico a los dados.
Miremos más de cerca.
Como expliqué anteriormente,
en Pharo, solo se envía un mensaje con una búsqueda de método.
Entonces, cuando envío un mensaje a cualquier objeto que sea,
Siempre miro en la clase. Sigo este enlace
Entonces esta aquí.
Siempre son estos dos pasos.
¿Qué dice esto sobre nuestro sistema?
Te lo dije, super es el receptor.
El receptor era dados.
Entonces busco nuevos en la superclase de la clase de dados.
La clave aquí es que es clase de dados y no dados
Lo veremos gráficamente después.
Una vez que encuentre el nuevo "nuevo"
Lo aplico al receptor, que es dados
¿Qué hace esto?
Aplico nuevo en dados,
que creará e inicializará Una nueva instancia de dados.
Inst será mi nueva instancia.
Un dado
Y lo inicializaré y lo devolveré.
Echemos un vistazo a un diagrama.
Cuando envío nuevo a dados,
donde me veo ¿En qué clase miro?
Me veo en la clase de dados.
Aquí es donde uso mi famoso método.
¿Qué hago ahora? ¿Qué dijimos sobre super?
Super es la clase de dados. Es el receptor
Envié el mensaje a este objeto.
Super me dice que mire adentro
la superclase de la clase que contiene la expresión.
Entonces miro en la superclase de la clase de dados.
Yo busco aqui Y en algún lugar aquí arriba,
Veremos más adelante,
nuevo se define
¿Qué pasa con la búsqueda?
Dijimos que el método se define aquí,
y lo aplicamos al receptor. Lo aplico a los dados.
Y esto me da una nueva instancia. Lo dibujaré
Devuelve una instancia:un dado.
Y inst es apuntado a esta nueva instancia
Entonces, inst es un nuevo dado.
Envío el mensaje de inicialización a inst, y luego lo devuelvo
A menudo luchas con este ejemplo. porque es muy retórico
Lo hago a proposito para ver si lo has entendido
Mezcla dos cosas.
Uno, súper
Miro en la superclase de la clase que contiene la expresión súper,
sabiendo que super es el receptor.
Y dos nuevas. Es un método que crea objetos.
Aquí es donde los dos se encuentran,
y tu tienes Me cuesta entender esto.
Sugiero que realmente revises Esta lección,
porque es muy importante
Lo repetiré
Super es el receptor del mensaje,
que en este caso es dados.
Miro en la superclase de la clase de dados para el nuevo método
que voy a aplicar a los dados, el receptor, para encontrar mi instancia de terminal.
¿Bueno?
En resumen:enviar un mensaje está buscando un método en la clase de receptor.
Eso es lo que hacemos cada vez.
Eso es todo lo que puedes hacer en Pharo, por lo que es fácil
Ya sabes que súper significa buscar en la superclase de la clase
que contiene la expresión super.
Y ese súper es el receptor, pero también puede ser una clase.
Aún no hemos terminado. Tengo otro problema para ti.
Si estás estudiando Pharo, debe gustarte los desafíos.
Aquí vamos. Imagine que tengo el siguiente problema:
El método dice: "Hacer súper-espacio-clase
"Igual igual clase propia".
¿Qué significa "igual igual"? Es la identidad del puntero.
De hecho, estoy preguntando: Es el objeto obtenido
con super-space-class iguales
como el objeto obtenido con auto-igual-clase?
Definí este método, que devolverá verdadero o falso.
Mi pregunta para ti es:
¿Cuál es el resultado de un nuevo foo?
Creo una nueva instancia de A
y le envío el mensaje foo, que editará este mensaje.
¿Cuál es el resultado y por qué?
Tendrás que pensar porque no te daré esta respuesta.