Hola a todos.
En esta conferencia presentaremos definiciones de clase y método
en Pharo
Lo específico de Pharo es que
no hay una sintaxis dedicada para definir métodos y clases.
Se definen dentro de las herramientas.
Las herramientas dan el contexto a la creación de una clase o método.
Aquí está el buscador de códigos principal en Pharo:
Nautilus.
Puede ver en la parte inferior
la definición de la clase Point.
Puede ver que la clase Point tiene la clase Objeto como superclase
y dos variables de instancia, x e y.
La superclase y las dos variables de instancia, x e y.
Y vemos en la parte inferior el nombre del paquete
en el que se agrega esta clase.
En las diapositivas tenemos un código como éste para crear una nueva subclase.
Podemos ver que para crear una clase en Pharo
enviamos un mensaje dedicado a la superclase
con el nombre de la subclase como parámetro
El mensaje subclass:instanceVariableNames:
classVariableNames:package:
es un mensaje enviado al objeto clase
con el nombre de la subclase como parámetro
la lista de nombres de las variable de instancia como parámetro
y el nombre del paquete como parámetro
En cuanto a la definición del método,
Tenemos, aún en la parte inferior ...
el nombre del método,
un comentario
y el código del método.
Y el método pertenece a una clase.
En la sintaxis para definir el método
no tenemos información sobre la clase a la que debe pertenecer el método.
De hecho, es la selección de la clase en el navegador de códigos
que nos dice la clase a la que pertenece el método.
En las diapositivas También necesitamos esta información.
Entonces, no podemos simplemente copiar el contenido de la definición de un método.
Tenemos que agregar un prefijo al nombre del método
para indicar la clase a la que pertenece este método.
Entonces agregamos ...
Antes del nombre del método agregamos el nombre de la clase
a lo que vamos a agregar el método que estamos definiendo
Entonces, en el buscador de códigos,
esta clase solo aparece como una selección
en el navegador.
Aquí definimos el método factorial de la clase entero.
Un pequeño recordatorio sobre los mensajes.
Aquí estamos definiendo el método factorial
Tenemos todos estos mensajes binarios ...
igual a, superior a, multiplicar por y menos ...
Mensajes binarios
Tenemos una llamada recursiva al método factorial.
Factorial, aquí, es un mensaje unario
enviado a un objeto de un tipo de número.
Y tenemos dos mensajes de palabras clave...
IfTrue:, dos veces y error:.
Y finalmente tenemos el sombrero o caret,
usado para devolver un valor
y finalizar el método.
Con respecto a la devolución,
por defecto en Pharo
todos los métodos devuelven self,
el objeto actual
El codigo de arriba
es exactamente el mismo que el código a continuación.
Entonces, la parte de retornar self al final del método es opcional.
Los métodos de clase le permiten enviar mensajes a las clases
Las clases también son objetos,
para que pueda enviar mensajes a las clases
Y para definir un método de clase
presione el botón de clase en Nautilus ...
y defina el método de clase.
En las diapositivas agregamos sistemáticamente la palabra class,
distinguir un método que se ejecutará en una clase
en lugar de en una instancia de la clase.
Entonces aquí el método x: y: se ejecutará en la clase Point,
no en una instancia de la clase Point.
Lo que debes recordar
de esta sesión ...
Una clase no está definida por una sintaxis particular
sino por enviar un mensaje a su superclase
Las clases se definen dentro de paquetes,
los nombres de los cuales son aprobados como parámetros del mensaje.
Todos los métodos son públicos.
No hay palabra clave para indicar que un método es público. Todos lo son.
No hay ninguna noción de que sea protegido o privado
Por defecto devuelve un método el receptor, que es self.
Puede usar el caret para devolver algo que no sea self.
Y los métodos de clase son métodos como cualquier otro.
Para agregarlos, presione el botón clase
antes de crear el método.
Esto concluye esta primera semana de sesiones.
En las proximas semanas
miraremos con más detalle en la sintaxis de Pharo,
bloques y una herramienta que eso es un inspector de objetos.