Hola. En esta sesión, Hablaremos sobre métodos de clase.
En Pharo, todo es un objeto,
y puede enviar mensajes a los objetos.
Entonces si toma estas dos piezas de información,
Las clases también son objetos,
y puede enviar información a ellas, De ahí los mensajes a las clases.
Le daré dos ejemplos.
"Time now" envía el mensaje "now" al objeto "Time" que es una clase.
Y devuelve la hora actual.
Entonces le envío el mensaje "now"
al objeto Time que es un nombre de clase.
Me devuelve la hora actual.
Del mismo modo, envío el mensaje "today" al objeto Date que es una clase
devuelve la fecha.
Daré tres ejemplos más.
Envío el mensaje workingDirectory a la clase FileLocator
devuelve la ruta actual
del archivo donde se lleva a cabo la ejecución
En el segundo ejemplo,
Envío el mensaje "getPng:" al objeto ZnEasy
con la URL de un archivo png como argumento
Devuelve el archivo png que fue descargado previamente.
En el tercer ejemplo,
Envío el mensaje "startDefaultOn:" a ZnServer que es una clase de nuevo,
con un número de puerto
Esto iniciará el servidor HTTP.
Entonces, en los tres casos, envía un mensaje a una clase.
¿Cómo implementa un método de clase?
Usted selecciona la clase
y hace clic en el botón Class para decir que quieres implementar un método
en el lado de la clase y no en el lado de la instancia.
Y implementa un método como de costumbre.
Entonces, el método "today" se implementa en el lado de la clase,
en la clase "Date".
En esta diapositiva, puede ver un error común.
Aquí, desea enviar el mensaje "withValue:"
a la clase "Counter"
para devolver un nuevo contador con un valor determinado como parámetro.
Entonces quiere
"Counter withValue:10" devuelva un nuevo contador que comience con el valor 10.
Si evalúo esta expresión, Obtengo el valor "Counter",
no un nuevo contador.
De hecho, obtengo la clase, No una nueva instancia de esta clase.
¿Por qué este error? ¿Cuál es el problema?
El problema es que, de forma predeterminada, todos los métodos devuelven "self".
Entonces, si no especifica el valor a regresar, el método volverá "self"
Entonces, este código es equivalente a este otro.
En este caso, self es "Counter"
Entonces el método devuelve la clase misma, no la instancia creada justo arriba.
Para corregir este problema,
simplemente agregue un acento circunflejo
delante de "self"
En resumen, las clases son objetos.
Puede enviar mensajes a cualquier objeto, así que también puede enviarlos a cualquier clase.
Para implementar los métodos correspondientes,
debe presionar el botón Clase Después de seleccionar una clase.
La mayoría de los métodos de clase crean no solo nuevas instancias
sino también otras cosas.
Verá muchos otros usos de los métodos de clase en Pharo.
Los métodos de clase son simplemente como otros métodos,
no hay reglas particulares.
La búsqueda funciona exactamente de la misma manera.
Lo sabremos la próxima semana.