En este video, explicaremos un punto rara vez cubierto en cursos de Pharo.
Cómo definir objetos de tamaño variable.
Notarás que ya usamos objetos de diferentes tamaños.
Aquí voy a crear una matriz usando esta expresión
Contiene diez elementos, todo puesto a cero.
Usando la misma expresión, Ahora creo una matriz
que contiene cinco elementos
Vemos que la clase Array crea instancias de tamaños variables.
Pero hasta ahora, no hemos explicado como puedes hacer esto
Asi que,
aquí te mostraremos cómo definir clases con instancias de tamaño variable,
cómo crear instancias de estos objetos,
y cómo acceder a estos tamaños variables.
Ahora para el primer punto.
Es muy sencillo.
La definición usa el mensaje variableSubclass:en lugar de la subclase :.
Copiaremos la definición de la clase Array.
Tenga en cuenta que usamos variableSubclass, instanceVariableNames,
y así sucesivamente, para crear la clase.
Mientras que generalmente, cuando definimos la clase Puntero,
Clase de contador o clase de dados,
solo usaríamos Subclase.
Usando esta definición, las instancias Creamos tenemos tamaños variables.
Usando este ejemplo, si queremos hacer un punto "extraño"
usando dos variables de instancia, xey,
como un punto y una zona variable, utilizamos esta definición.
Esto crea objetos que se parecen a esto, con un valor para x,
un valor para y, y una zona variable por instancia.
También podríamos tener otra instancia,
que también tiene xey, con 10 aquí y 20 aquí,
y, por ejemplo, 100 aquí y 200 aquí,
con una zona variable que puede contener diferentes objetos.
Entonces, las instancias de una clase que puede tener instancias de tamaño variable
tener una zona indexada que se agrega después de las variables nombradas, como x e y.
Está implícita y solo hay una por clase,
para evitar problemas de implementación al expandirlo
Ahora hemos visto cómo crear clases.
que tienen diferentes instancias de tamaño.
Ahora regresaremos a cómo podemos instanciarlos
y cómo acceder a este tamaño variable.
La forma en que los instalamos
es usar el mensaje "nuevo:" observando el uso del colon.
Discutimos esto en el curso de colecciones.
Aquí queremos crear un objeto de tamaño variable
El tamaño variable del objeto se especifica por su valor "max".
Entonces, creamos un objeto, una matriz con cuatro elementos
Esto muestra los cuatro elementos.
¿Cómo accedemos a este tamaño variable?
Usamos los mensajes en:y en:put :, que viste en las matrices.
Esto funciona para todos los objetos. con un tamaño variable.
Entonces, si escribimos en:2 aquí, agregamos 'lulu'.
Entonces, si accedemos al valor 1, lógicamente devolverá cero.
Y si miramos el valor 2, Nos dará 'lulu'.
De hecho, se aplica una asignación aquí
entre matrices y objetos de tamaño variable usando en:put:y 'lulu'.
Este protocolo API funciona para matrices
y para todos los objetos queremos tener un tamaño variable.
No he explicado mucho aquí,
solo cómo definir la clase Array y extiéndalo a otros objetos,
ya sabes el protocolo.
Entonces, en Pharo hay objetos o clases,
que toma diferentes formas.
Hay clases que solo tienen variables de instancia nombradas,
como clase de contador con conteo o clase de dados con el número de lados.
Luego tenemos clases que solo tienen
una variable o zona indexada, como clase de matriz.
Luego tenemos otras clases que son una mezcla de ambos.
Sin embargo, hay algunas limitaciones, Es más sutil de lo que parece.
Ahora podemos decidir en el tipo de variable de clase.
Solo te mostraré la intención.
Este aspecto variable del que hablamos
pueden simplemente ser punteros de objetos, o quizás variables Byte o Word.
Se usa para interfaz con el mundo exterior
cuando necesitamos especificar un tamaño,
y dentro de eso ponemos punteros a objetos con una forma específica.
Esta es una función avanzada, pero quería mostrártelo.
Normalmente solo necesitarás para usar "subclase".
A veces usará "variableSubclass"
y "mapa de bits" que representa la pantalla.
Bitmap es un objeto
que tiene una zona variable, denominada Palabras.
Solo para que sepas que existe.
Como Pharo es un sistema reflexivo,
podemos hacerle preguntas
Entonces, usando estos métodos, podemos hacer consultas
Tal como si el tamaño de la clase es fijo o variable.
O si almacena punteros o bytes, por ejemplo.
Tenemos toda la API para preguntar sobre el tipo de clase.
Esta lista fue creada. haciendo consultas al sistema.
Se aplica una restricción.
Clases que se definen utilizando la subclase
puede tener cualquier tipo de subclase.
Si tenemos puntos usando x e y,
podremos agregar una subclase llamada z
o una subclase llamada xy, más una zona variable.
Pero si quieres crear una subclase de una clase que ya tiene una variable,
solo puedes usar variables desde clases que son variables.
De lo contrario, el sistema que construye Las clases dicen que es incompatible.
Necesita saber que hay una zona para manejar las restricciones.
En cualquier caso, el sistema le informará si es imposible
Entonces, ¿qué necesitas saber?
Ahora deberías saber como definir clases
que tienen instancias de tamaños variables
y cómo instanciarlos usando "new:"
y cómo acceder a ellos utilizando el protocolo visto en las matrices.