SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
PROGRAMACIÓN ORIENTADA
A OBJETOS
EL LENGUAJE SMALLTALK
GIPSI
POO - GIPSI -
 
TEMAS:
⇒⇒ Introducción a Smalltalk
⇒⇒ Smalltalk: Conceptos básicos
•• Clase
•• Instancia
•• Mensaje
•• Herencia
⇒⇒ Sintaxis del lenguaje
•• Expresiones
•• Literales
∗∗ tipos
•• Variables
∗∗ tipos
∗∗ asignaciones
∗∗ pseudovariables
•• Mensajes
∗∗ tipos
∗∗ evaluación de las expresiones de mensajes
∗∗ mensajes en cascada
∗∗ polimorfismo
•• Métodos y expresiones de retorno
∗∗ tipos
∗∗ estructura de cada tipo
•• Estructura de control: Selección o Alternativa
∗∗ tipos
∗∗ Mensajes de comparación a objetos
•• Bloques
•• Estructura de control: Repetición o Iteración
∗∗ tipos
POO - GIPSI - ¡
Árbol genealógico de los lenguajes OO
POO - GIPSI - ¢
Introducción a SMALLTALK
1. SMALLTALK es un lenguaje orientado a objetos puro, pues todas las
entidades que maneja son objetos. El lenguaje se basa en conceptos
tales como objetos y mensajes.
2. SMALLTALK es descendiente del lenguaje SIMULA y tiene sus
orígenes en el Centro de Estudios de Palo Alto de Xerox, en los
comienzos de 1970. Su desarrollo se basa en gran parte en las ideas de
Alan Kay. Las tres versiones principales del lenguaje son
SMALLTALK-72, SMALLTALK-76 y SMALLTALK-80.
3. SMALLTALK es mucho más que un lenguaje de programación, es un
ambiente completo de desarrollo de programas. Éste integra de una
manera consistente características tales como un editor, un compilador,
un debugger, utilitarios de impresión, un sistema de ventanas y un
manejador de código fuente.
4. SMALLTALK elimina la frontera entre aplicación y sistema operativo,
modelando todos los elementos como objetos.
POO - GIPSI - £
La programación en SMALLTALK requiere de al
menos los siguientes conocimientos:
1. los conceptos fundamentales del lenguaje: manejo de clases y objetos,
mensajes, clases y herencia.
2. la sintaxis y la semántica del lenguaje.
3. cómo interactuar con el ambiente de programación de SMALLTALK
para construir nuevas aplicaciones SMALLTALK.
4. las clases fundamentales del sistema, tales como numéricas,
colecciones, gráficas y las clases de interfase del usuario.
Diseñar nuevas aplicaciones SMALLTALK, requiere de
conocimientos sobre las clases existentes en el sistema
SMALLTALK. Frecuentemente la programación en
SMALLTALK se denomina
"Programación por extensión"
Las nuevas aplicaciones son construidas por extensión de
las librerías de clases de SMALLTALK.
POO - GIPSI - ¤
SMALLTALK: CONCEPTOS BÁSICOS
Los conceptos básicos son:
- Clase
- Instancia
- Mensaje
- Herencia
La programación en SMALLTALK
consiste en:
- Crear clases.
- Crear instancias.
- Especificar la secuencia de
mensajes entre objetos.
POO - GIPSI - ¥
CLASE
Es una colección de objetos que poseen características y operaciones
comunes.
Una clase contiene toda la información necesaria para crear nuevos objetos
y permite agrupar bajo un mismo nombre las variables y los métodos que
manipulan esas variables.
Las variables de la clase son accedidas por los métodos m1, m2, m3, ... mn.
MÉTODO
Es el procedimiento local a una clase. Su activación permite el acceso a
las variables de la clase.
Variables de la clase
Mét Mét Mét ... Mét
m1 m2 m3 ... mn
POO - GIPSI - ¦
INSTANCIA DE CLASES
A partir de una clase se pueden crear tantos elementos como se deseen.
A estos elementos creados se los denomina Instancias u Objetos de la
clase.
Por lo tanto dos instancias diferentes de una misma clase comparten los
mismos métodos y la misma lista de variables con valores diferentes.
Clase Libro
Instancia I1 Instancia I2
título autores editorial añoEdición idioma isbn
tema prestado
método método método
verTítulo prestar devolver
[...] [...] [...]
título=POO
autores=Timothy Budd
editorial= Addison-
Wesley Iberoamericana
añoEdición=1991
idioma=español
isbn=0-201-60103-6
tema=POO
prestado=true
verTitulo, prestar,
devolver
título=Inside Smalltalk
- Vol. I
autores=Lalonde-Pugh
editorial= Prentice-Hall
International
añoEdición=1990
idioma=inglés
isbn=0-13-438430-3
tema=POO
prestado=false
verTitulo, prestar,
devolver
POO - GIPSI - §
MENSAJES
Es una petición a un objeto para que brinde algún servicio que el objeto
puede realizar.
⇒⇒ El mensaje especifica que operación se debe llevar a cabo, pero no
cómo realizarla.
⇒⇒ El objeto al que se envía el mensaje se denomina RECEPTOR del
mensaje.
⇒⇒ El texto del envío de un mensaje está compuesto de:
• el nombre del objeto destinatario denominado RECEPTOR
DEL MENSAJE.
• un SELECTOR, que es el nombre del método (punto de entrada
en el objeto receptor).
• y eventualmente, PARÁMETROS del método que se quiere
activar, denominados ARGUMENTOS DEL MENSAJE.
Instancia I2
Texto del envío del mensaje: I2 prestar
selector
receptor
Variables
Método prestar
…
prestar
Valor
POO - GIPSI - ¨
HERENCIA
⇒⇒ Permite crear nuevas clases partiendo de otras previamente definidas
con características semejantes a la que se quiere crear.
⇒⇒ El mecanismo de herencia nos permite definir las propiedades
particulares de un nuevo objeto y heredar las propiedades comunes ya
existentes.
Herencia en la definición de la clase Cn
Clase C1
Hijo de C1
Clase Cn
…
Hijo de Cn-1
Variables de C1
Métodos de C1
Variables de C2
Métodos de C2
Variables de Cn
Métodos de Cn
Variables de C1 +
Variables de C2 +
… +
Variables de Cn
Métodos de C1 +
Métodos de C2 +
… +
Métodos de Cn
POO - GIPSI -
  ©
En SMALLTALK, todas las clases heredan de una
única clase llamada Object.
Representación ascendente (Bottom-up) parcial de las clases
provistas por el Smalltalk
SMALLTALK maneja sólo HERENCIA SIMPLE.
Object
Magnitude Collection
Number Time
                 !
 # $  #  $      ! %

 ' '  $      ! %
(
# #  )  $      ! %
FloatInteger
Date
Fraction
Bag Set
. . .
. . .
. . .
POO - GIPSI -
   
La herencia se hace sobre las clases y NO sobre las instancias.
Una instancia de una clase maneja el conjunto de variables y métodos
disponibles en dicha clase.
Clase Textos
Instanciación
título idioma tema nroIdentif
verTitulo darDeAlta darDeBaja
editorial director
volumen número
mes año
verIndice
autores editorial
prestado isbn
añoEdición
prestar devolver
verAutor
autores
nombreRevista
perteneceA
título=POO
autores=Timothy Budd
editorial= Addison-
Wesley Iberoamericana
añoEdición=1991
idioma=español
isbn=0-201-60103-6
nroIdentif=194785
tema=POO
prestado=true
verTitulo, prestar,
devolver, verAutor,
darDeAlta, darDeBaja
Clase Libro Clase Revistas Clase Artículos
POO - GIPSI -
 
¡
ACTIVACIÓN DE MÉTODOS
Cuando una instancia recibe un mensaje, el selector del mensaje podrá o no
corresponder con un método local a la clase de la instancia.
1. Si el selector corresponde a un método local de la clase del objeto,
entonces hay activación de ese método.
2. Si el selector no corresponde a un método local a la clase del objeto,
entonces se busca el método en la superclase de la clase del objeto y así
recursivamente hasta encontrar la primera clase del árbol de herencia que
posea un método idéntico al selector del mensaje.
Como vemos la investigación se hace de abajo a arriba.
Clase C1 Herencia
Clase C2 Herencia
búsqueda del método
m1 en la clase C1.
Instanciación
búsqueda del método
m1 en la clase C2. Instancia de C2
mensaje
m1 (selector)
Object
Variables
Método m1
Método m2
Variables
Método m3
POO - GIPSI -
 
¢
SINTAXIS DE SMALLTALK
La sintaxis de SMALLTALK es:
objeto mensaje
Por ejemplo
• 3 factorial
significa que el mensaje factorial es enviado al objeto 3 (instancia de la clase
Integer) y por lo tanto se ejecutará el método de nombre factorial
que se encuentra en la clase Integer o en sus superclases.
• ‘HOLA’ size
• #(4 8 6 3) at: 2
• $A asciiValue
POO - GIPSI -
 
£
EXPRESIÓN
Smalltalk es un lenguaje basado en expresiones. Una
expresión es una secuencia de caracteres que puede ser
evaluada.
Hay cuatro tipos de expresiones:
1. Literales
2. Nombres de Variables
3. Expresiones de mensajes
4. Expresiones de bloque
La interfase de usuario permite la selección y evaluación de estas
expresiones.
POO - GIPSI -
 
¤
TIPOS DE EXPRESIONES
1- LITERALES (constantes literales u objetos constantes)
El valor de una expresión literal es siempre el mismo
objeto.
Hay cinco tipos de constantes literales:
1. Números
2. Caracteres
3. Secuencia de caracteres
4. Símbolos
5. Arreglos
NÚMEROS
Descripción: Los números son objetos que representan valores
numéricos y responden a mensajes que calculan
resultados matemáticos.
Representación: Secuencia de dígitos precedidos o no de un signo '-' y/o
con un punto decimal.
Ejemplos: 25 27.5 -35.7 -128
Notación científica: 25.53e2 -8.126e-3.
POO - GIPSI -
 
¥
CARACTERES
Descripción: Los caracteres son objetos que representan los símbolos
que forman un alfabeto.
Representación: Expresión precedida por el signo $ seguida por cualquier
carácter
Ejemplos: $a $A $3 $+ $$
SECUENCIA DE CARACTERES
Descripción: Son objetos que representan una cadena de caracteres.
Responden a mensajes para acceder a caracteres
individuales, sustituir secuencias, compararlas con otras
secuencias y concatenarlas.
Representación: Secuencia de caracteres encerrados entre comillas (‘’).
Ejemplos: ‘Hola’ ‘secuencia de caracteres’ ‘Region 001’
Se pueden concatenar cadenas separándolas con coma:
‘Esto es’, ‘una tira’, ‘de caracteres’ equivale a: ‘Esto es
una tira de caracteres’.
POO - GIPSI -
 
¦
SÍMBOLOS
Descripción: Son objetos que representan secuencias de caracteres
utilizados como nombres en el sistema.
Representación: Secuencia de caracteres alfanuméricos precedidos por el
carácter ‘#’.
Ejemplos: #simbolo #B450 #region
Los nombres de clases en SMALLTALK son nombres
simbólicos: #Figuras #Cuenta #Pila.
ARREGLOS
Descripción: Son objetos estructurados cuyos elementos son accesibles
mediante un índice entero. Cada elemento del array es un
literal. Estos objetos responden a mensajes que piden
acceso a su contenido.
Representación: Secuencia de literales separados por blancos y encerrados
entre paréntesis y precedidas por el carácter ‘#’. Los
símbolos y arreglos contenidos como literales en el
arreglo, no se preceden con el carácter ‘#’
Ejemplos: #(1 2 3) arreglo de tres elementos enteros.
#(‘producto’ ‘120’ ‘factura’ ‘cantidad’) arreglo de cuatro
elementos que son secuencias de caracteres.
#(‘elemento’ (1 $4 ‘uno’) 4 $A) arreglo de cuatro
elementos: secuencia, array, entero y carácter.
POO - GIPSI -
 
§
2- VARIABLES Y ASIGNACIÓN
TODA VARIABLE EN SMALLTALK ES UN OBJETO
PUNTERO QUE PERMITE REFERENCIAR OTRO
OBJETO
Los nombres de variables en SMALLTALK son identificadores que
consisten en una secuencia de letras y dígitos que comienza con una letra.
Una expresión de asignación consta de la variable cuyo valor va a
cambiarse, seguido de un prefijo de asignación: una flecha apuntando hacia
la izquierda (‘0 ’) en SMALLTALK-80 o un ‘:=‘ en SMALLTALK V.
variable 1
1
expresión (SMALLTALK-80)
variable := expresión (SMALLTALK V)
POO - GIPSI -
 
¨
VARIABLES Y ASIGNACIÓN
EJEMPLOS
x 2
2
‘Una cadena’
la variable x apunta al objeto ‘Una cadena’
Una variable puede contener diferentes punteros a objetos a
lo largo de la ejecución
x 3
‘Una cadena’
...
x 3
23 factorial
...
x 3
Array new: 5
‘Una cadena’
x
POO - GIPSI - ¡
©
TIPOS DE VARIABLES
Hay dos tipos de variables:
1. variables privadas.
2. variables compartidas
Las VARIABLES PRIVADAS sólo son accesibles por un objeto.
Las VARIABLES COMPARTIDAS pueden ser accedidas por más de un
objeto.
Los nombres de las variables privadas deben comenzar con
una letra minúscula y los nombres de las variables
compartidas deben comenzar con letra mayúscula.
NúmeroPatas = 4
raza nombre edad
darNombre
[...]
Clase Perro
raza = ‘cocker’
nombre = ‘Peluche’
edad = 5
darNombre
raza = ‘caniche’
nombre = ‘Toy’
edad = 3
darNombre
raza = ‘boxer’
nombre = ‘Guardián’
edad = 7
darNombre
POO - GIPSI - ¡
 
VARIABLES PRIVADAS
CLASIFICACIÓN
VARIABLES PRIVADAS
VARIABLES DE
INSTANCIA
VARIABLES
TEMPORALES
VARIABLES
DE INSTANCIA
NOMBRADAS
VARIABLES
DE INSTANCIA
INDEXADAS
ARGUMENTOS
DE MÉTODOS
ARGUMENTOS
DE BLOQUES
TEMPORALES
DE BLOQUES
TEMPORALES
DE MÉTODOS
POO - GIPSI - ¡ ¡
VARIABLES COMPARTIDAS
CLASIFICACIÓN
VARIABLES COMPARTIDAS
VARIABLES DE
CLASE
VARIABLES
GLOBALES
VARIABLES
POOL
POO - GIPSI - ¡ ¢
VARIABLES PRIVADAS
VARIABLES DE INSTANCIA
⇒⇒ Aunque todas las instancias de una clase tienen el mismo conjunto de
variables de instancia, sus valores son únicos a cada una de las
mismas.
⇒⇒ Sólo pueden ser accedidas en métodos de instancia disponibles en la
clase.
Las variables de instancia existen durante todo el tiempo de
vida de un objeto y representan el estado del objeto.
1. Variables de Instancia Nombradas
Son variables que tienen asociado un nombre y son identificadas por él.
2. Variables de Instancia Indexadas
Son variables que no tienen nombre y sólo pueden accederse
enviando un mensaje a la instancia con un índice que especifique a
cual de las variables indexadas se desea acceder.
Los dos mensajes principales de indexación son: at:, at:put:.
EJEMPLO:
arreglo 4 Array new: 5 Retorna una instancia de la clase
Array.
arreglo at: 1 put: ‘abc’ La primera variable de instancia de
arreglo es inicializada con la cadena
‘abc’.
arreglo at: 1 Retorna el valor de la primera
variable de instancia: ‘abc’.
POO - GIPSI - ¡ £
VARIABLES PRIVADAS (continuación)
VARIABLES TEMPORALES
⇒⇒ Son las variables que están definidas en los métodos, bloques o
programas Smalltalk. Se utilizan en una actividad dada y después se
destruyen.
⇒⇒ Representan un estado transitorio de un objeto, existen mientras dura
la activación del método, bloque o programa.
EJEMPLOS
1. Uso de variables temporales en un programa:
| complejo1 complejo2 suma |
complejo1 5 Complex newWithReal: -5.9 andImaginary: 4.3.
complejo2 5 Complex newWithReal: 8.5 andImaginary: 1.0.
suma 5 complejo1 + complejo2.
...
POO - GIPSI - ¡ ¤
EJEMPLOS (continuación)
2. Uso de variables temporales de método y parámetros de método en el
método de instancia + de la clase Complex:
+ unComplejo
“Retorna una instancia de la clase Complex igual a la suma del
receptor y el argumento unComplejo”
|sumaParteReal sumaParteImaginaria|
sumaParteReal 6 realPart + unComplejo realPart.
sumaParteImaginaria 6 imaginaryPart + unComplejo imaginaryPart.
...
realPart
imaginaryPart
realPart
imaginaryPart
+
Clase Complex
POO - GIPSI - ¡ ¥
VARIABLES COMPARTIDAS
VARIABLES DE CLASE
⇒⇒ Son variables compartidas por todas las instancias de
una clase y sus subclases. Tienen el mismo valor para
todas las instancias. Sólo pueden ser accedidas por
los métodos de clase y los métodos de instancia de la
clase y sus subclases.
EJEMPLO
Object subclass: #Perro
instanceVariableNames:
‘raza nombre edad’
classVariableNames:
‘NumeroPatas’
poolDictionaries:
‘’
NúmeroPatas = 4
raza nombre edad
darNombre
[...]
Clase Perro
POO - GIPSI - ¡ ¦
PSEUDOVARIABLES
Existen cinco pseudovariables:
nil, true, false, self y super.
⇒⇒ El valor de una pseudovariable no puede cambiarse con una expresión
de asignación.
⇒⇒ nil, true y false son instancias de clases.
⇒⇒ self y super son objetos cuyo significado depende del contexto donde
se usen.
⇒⇒ Las cinco son palabras reservadas y son globales.
nil es el valor por defecto de una variable. Es usado para representar el
valor de objetos no inicializados.
true es la única instancia de la clase True y representa el valor booleano
VERDADERO.
false es la única instancia de la clase False y representa el valor booleano
FALSO.
self es usada en métodos; su valor es siempre el objeto que recibe el
mensaje que causa que el método que contiene self sea ejecutado.
super es usada en métodos. Su valor es equivalente a self, el objeto que
recibe el mensaje que causa que el método que contiene super sea
ejecutado, pero la estrategia de búsqueda del método es diferente.
La búsqueda comienza en la superclase inmediata de la clase que
contiene el método en el cual super aparece.
Los mensajes a super son utilizados cuando se quiere utilizar un
método de una superclase que es redefinido en una subclase.
POO - GIPSI - ¡ §
USO DE SELF Y SUPER
Texto del envío del mensaje: ca otroMetodo.
Posibles implementaciones del método de instancia otroMetodo:
OtroMetodo
...
self hacerAlgo.
(ejecuta definición realizada en la
clase B)
OtroMetodo
...
super hacerAlgo.
(ejecuta definición realizada en la
clase A)
...
hacerAlgo otroMetodo
[...] [...]
...
Clase B
...
......
Clase C
...
hacerAlgo
[...]
Clase A
Instancia ca
POO - GIPSI - ¡ ¨
3- EXPRESIONES DE MENSAJES
Las expresiones de mensajes en SMALLTALK describen quién es el
receptor del mensaje, el nombre del mensaje y los argumentos.
Por ejemplo:
16.79 rounded
‘hola que tal’ size
‘hola’ includes: $o
numerador + (unaFracción verNumerador).
Receptor Mensaje
Por ejemplo en la expresión SMALLTALK ‘hola’ includes: $o, la cadena
‘hola’ es el receptor del mensaje; includes: es el selector (nombre del
mensaje) que identifica unívocamente la operación que es seleccionada y $o
es el argumento necesario para realizar la operación.
La expresión es evaluada de la siguiente manera:
1. el mensaje includes: $o es enviado al objeto cadena ‘hola’.
2. el objeto cadena sabe como responder a este mensaje y el objeto
booleano true es retornado como un resultado.
Selector/Argumentos
includes: $o
Receptor
‘hola’
POO - GIPSI - ¢
©
TIPOS DE MENSAJES
SMALLTALK soporta tres tipos primitivos de mensajes:
- UNARIOS (unary)
- BINARIOS (binary)
- de PALABRA CLAVE (keyword)
POO - GIPSI - ¢
 
MENSAJES UNARIOS
Los mensajes unarios no tienen argumentos, su sintaxis comprende
solamente un receptor y un selector.
EJEMPLOS
7 isPrime: el mensaje consistente del selector isPrime es enviado al
objeto entero 7. El objeto true es retornado como el
resultado.
$a asInteger el mensaje consistente del selector asInteger es enviado
al objeto carácter a. El objeto entero representando el
valor ordinal del carácter es retornado como el resultado.
car isVowel el mensaje consistente del selector isVowel es enviado al
objeto variable car. El objeto true o false es retornado
como resultado.
Carta new el mensaje consistente del selector new es enviado a la
clase Carta. Crea una nueva instancia de la clase Carta.
POO - GIPSI - ¢ ¡
MENSAJES BINARIOS
⇒⇒ Además del receptor y selector, la sintaxis de los mensajes binarios
tiene un único argumento. Los selectores para los mensajes binarios
son caracteres especiales simples o dobles.
⇒⇒ Los selectores de carácter simple incluyen operadores de
comparación y aritméticos tales como:
+ - * /   =
⇒⇒ Los selectores de carácter doble incluyen operadores tales como
~= (not =) = // (división entera)
EJEMPLOS
1.5 + 6.3e2 el mensaje + 6.3e2 es enviado al objeto float 1.5. El
selector es + y el argumento es el objeto 6.3e2. El
resultado retornado es el objeto float 631.5.
‘abc’ ~ = ‘def’ el mensaje ~ = ‘def’ es enviado al objeto cadena ‘abc’. El
selector es ~ = y el argumento es el objeto cadena ‘def’.
El receptor y el argumento cadena son comparados por
desigualdad. El objeto booleano true es retornado.
‘hola ’,’que tal’ el mensaje , ‘que tal’ es enviado al objeto cadena ‘hola‘.
El selector es , y el argumento es el objeto ‘que tal’. El
objeto cadena ‘hola que tal’ es retornado.
POO - GIPSI - ¢ ¢
MENSAJES DE PALABRA CLAVE
⇒⇒ Estos mensajes contienen una o más palabras claves,
donde cada palabra clave tiene un argumento simple
asociado con ella.
⇒⇒ El nombre de la palabra clave siempre termina en dos
puntos (:). Los dos puntos son parte del nombre (éste
no es un terminador especial).
⇒⇒ El selector en un mensaje de más de una palabra
clave se forma concatenando todas las palabras
claves, por ejemplo between:and:, at:put:, etc.
POO - GIPSI - ¢ £
MENSAJES DE PALABRA CLAVE
EJEMPLOS
28 gcd: 12 el mensaje gcd: 12 es enviado al objeto entero 28, el
selector es gcd: y el argumento es el objeto entero 12.
El resultado que se retorna es el máximo común divisor
entre el objeto receptor 28 y el objeto argumento 12, es
decir, el objeto 4.
#(4 3 2 1) at: 4 el mensaje at: 4 es enviado al objeto arreglo (4 3 2 1).
El selector es at: y el argumento es el objeto entero 4.
El resultado retornado es el objeto entero 1, el objeto
asociado con el índice 4 en el arreglo.
vector at: 2 put: ‘st’ El mensaje at: 2 put: ’st‘ es enviado a la variable
vector, el selector es at:put: y los argumentos son los
objetos 2 y ‘st’. El resultado es colocar el objeto
cadena ‘st’ como segundo elemento en el objeto
arreglo apuntado por la variable vector.
Array new: 3 El mensaje new: 3 es enviado a la clase Array. El
selector es new: y el argumento es el objeto entero 3.
El resultado retornado es una instancia de la clase
Array de 3 elementos.
POO - GIPSI - ¢ ¤
EVALUACIÓN DE LAS EXPRESIONES DE MENSAJES
El receptor o argumento de una expresión de mensajes puede ser en si
mismo una expresión de mensajes. Esto da origen a expresiones complejas
de mensajes y a la necesidad de un orden de evaluación.
Por ejemplo, el siguiente mensaje contiene mensajes de los tres tipos:
4 factorial gcd: 4 * 6
unario pal. clave binario
En SMALLTALK la relación de precedencia en la evaluación de
expresiones es la siguiente:
1. expresiones entre paréntesis.
2. expresiones unarias (evaluadas de izquierda a derecha).
3. expresiones binarias (evaluadas de izquierda a derecha).
4. expresiones de palabra clave.
5. expresiones de asignación.
POO - GIPSI - ¢ ¥
EVALUACIÓN DE LAS EXPRESIONES DE MENSAJES
EJEMPLOS
EXPRESIONES
DE MENSAJES
RESULTADOS DE
LA EVALUACIÓN
2 factorial negated 7
3 + 4 * 6 + 3 7
2 / 3 * 5 / 7 7
2 / (3 * 5) / 7 7
15 gcd: 32 // 2 7
2 factorial + 4 7
5 between: 1 and: 16 squared + 4 7
Resul 8 4 factorial gcd: 4 * 6 7
#(1 2 $a), #($b ‘cd’) 7
‘maría’ at: 1 put: $M 7
POO - GIPSI - ¢ ¦
MENSAJES EN CASCADA
⇒⇒ Un mensaje en cascada es una forma práctica de especificar que
varios mensajes se envían al mismo receptor.
⇒⇒ En el mensaje en cascada se escribe el receptor seguido por la lista de
expresiones de mensajes separados por punto y coma (;).
Por ejemplo, si se desea modificar los tres primeros elementos del objeto
arreglo unArreglo, debe usarse el mensaje at: indice put: unValor, que
modifica el elemento indice de unArreglo.
La expresión de la izquierda envía el mismo mensaje a unArreglo tres
veces. Alternativamente se puede emplear la expresión de la derecha que
tiene los mensajes en cascada.
UnArreglo at: 1 put: 3.
UnArreglo at: 2 put: 8.
UnArreglo at: 3 put: 5.
unArreglo at: 1 put: 3; at: 2 put: 8; at: 3 put: 5.
Conjunto 9 Set new.
Conjunto add:1.
Conjunto add:2.
Conjunto add:3.
Set new add: 1; add: 2; add: 3.
El empleo de cascadas elimina, a menudo, la necesidad de las variables
temporales.
POO - GIPSI - ¢ §
POLIMORFISMO
(VINCULACIÓN DINÁMICA Y SOBRECARGA DE MENSAJES)
El mismo mensaje puede ser interpretado de diferentes formas por diferentes
objetos. Por ejemplo:
5 + 100
(200 @ 200) + 100
Ambos usan el mensaje + 100, pero los objetos receptores reaccionan al
mensaje de maneras muy diferentes.
En el primer ejemplo el receptor es el objeto entero 5 y el selector + es
interpretado como la suma de enteros. En el segundo ejemplo el receptor es
el objeto punto (x, y) con coordenadas (200, 200). En esta expresión el
selector + es interpretado como la suma definida sobre puntos. El punto
con coordenadas (x, y) igual a 300 es retornado.
Es el receptor del mensaje el que determina como es interpretado el
mensaje
El método suma realmente invocado por una expresión tal como unObjeto +
100 es determinado por el tipo de objeto que recibe el mensaje en el tiempo
de ejecución. Esto se denomina vinculación dinámica.
Cuando el mismo selector es aceptado por clases diferentes de objetos, se
dice que el selector está sobrecargado.
POO - GIPSI - ¢ ¨
POLIMORFISMO
EJEMPLO
El método between:and: trabaja con varios tipos de argumentos.
El método between:and: está definido en la clase abstracta Magnitude y
prueba si el receptor está entre dos extremos. Efectúa la comprobación por
medio del envío del mensaje =.
x between: 2 and: 4. mensaje between:and: enviado a un
objeto entero.
x between: $a and: $z. mensaje between:and: enviado a un
objeto carácter.
x between: 2@4 and: 12@14. mensaje between:and: enviado a un
objeto punto.
‘carbon’ between: ‘carbohidrato’
and: ‘carbonato’.
mensaje between:and: enviado a un
objeto cadena.
y @ 2.
z @ $d.
(y between: 1 and: 3) and:
(z between: $b and: $t).
POO - GIPSI - £
©
5 - EXPRESIONES DE BLOQUES
⇒⇒ Son instancias de la clase BlockContext y representan una secuencia
de expresiones separadas por puntos y encerradas entre corchetes ‘[]’
que serán evaluadas sólo cuando el mensaje value adecuado sea
enviado al bloque.
⇒⇒ La evaluación de un bloque retorna el resultado de la evaluación de la
última expresión del mismo.
A B C D E F B G H
I P Q R S T P U V S W X Y R S U `
P Q R S T P a V S W X Y R S a `
` ` ` b
⇒⇒ Los bloques, como cualquier otro objeto, pueden ser asignados a
variables y definidos en métodos o programas Smalltalk.
POO - GIPSI - £
 
EXPRESIONES DE BLOQUES (continuación)
⇒⇒ Los bloques pueden tener parámetros (variables temporales
argumentos de bloque) y variables locales (variables temporales de
bloque).
c d e f g h d i p
q r s t u v w x y u €  r s t u v w x y u € ‚ r s t u v w x y u € ƒ „ „ „ …
… † € ‡ t †  † € ‡ t † ‚ „ „ „ † € ‡ t † ˆ …
€ ‰  x y €  w x ˆ ‘ t  x  „
€ ‰  x y € ‚ w x ˆ ‘ t  x ‚ „
„ „ „ ’
  “ ”  • %  •      • !   “    '  # – —  ! # • ˜ •   ! %  % ™  
$ % • ! %  ! • —   •  d  • e     f
⇒⇒ unBloque value
⇒⇒ unBloque value: parámetro
⇒⇒ unBloque value: parámetro1 value: parámetro2
⇒⇒ unBloque value: parámetro1 value: parámetro2 value: parámetro3
⇒⇒ unBloque valueWithArguments: unArregloDeParámetros
POO - GIPSI - £ ¡
EXPRESIONES DE BLOQUES
EJEMPLOS
[‘evaluación retardada’ size] value. Bloque con una expresión de
mensaje. Se evalúa la expresión y es
retornado el objeto entero 20 que
representa en tamaño en caracteres
del objeto cadena ‘evaluación
retardada’.
[Date today dayName.
‘cadena a convertir’ asUpperCase.
] value.
Bloque con más de una expresión
de mensaje. Se evalúan las
expresiones una a una y es retornado
el objeto cadena ‘CADENA A
CONVERTIR’ que representa el
resultado de la evaluación de la
última expresión del bloque.
| unBloque|
unBloque g [ $o isVowel.
‘9 Sep 1995’ asDate dayName.] .
...
unBloque value asUpperCase.
Asignación de un bloque a una
variable temporal. En este caso el
bloque es evaluado cuando se envía
el mensaje value al objeto
“apuntado” por unBloque, ya que el
contenido de esta variable es el
código a evaluar. El resultado es el
objeto cadena que corresponde al día
de la semana de la fecha utilizada, al
que luego se le envía el mensaje para
que sea convertida en mayúsculas.
POO - GIPSI - £ ¢
EXPRESIONES DE BLOQUES
EJEMPLOS (continuación)
| unBloque|
unBloque h [ :a :b |
(Pen new dragon: a)
go: b;
mandala: a diameter: b.
] .
...
unBloque value: 10 value: 100.
Asignación de un bloque con
argumentos a una variable
temporal. Como en el caso anterior
el bloque es evaluado en el momento
en el que se le envía el mensaje
value: 10 value: 100. Dentro del
bloque se crea una instancia de la
clase Pen y se le envía el mensaje
dragon: a. Luego a la instancia de la
clase Pen se le envían en cascada los
mensajes go: b y mandala: a
diameter: b. (Ver figura 1)
POO - GIPSI - £ £
FIGURA 1: VENTANA DE TRABAJO DE SMALLTALK V
i
 j   !  $ $   
 k      % l  $  
    
i
 j   !  $ $  
m
  j  n 
o
i
 j   !  $ $  
m
  j  n  p q r
o
q s q t 
o u
q p v w v x t
POO - GIPSI - £ ¤
MÉTODOS Y EXPRESIONES DE RETORNO
⇒⇒ Los métodos de una clase son los procedimientos que se activan ante
la recepción de un mensaje.
⇒⇒ La forma en que un objeto responde a un mensaje está descripta en un
Método. Cada clase contiene la lista de métodos que le permiten a sí
misma y a sus instancias responder a los mensajes que le son
enviados.
MÉTODOS: CLASIFICACIÓN
Los mensajes pueden ser enviados a las clases o las instancias. Por lo tanto
los métodos que se activan ante dichos mensajes también deberán estar
asociados a las clases o a las instancias:
⇒⇒ MÉTODOS DE INSTANCIA: contienen los detalles de
implementación para mensajes a los cuales sólo las instancias de una
clase pueden responder.
⇒⇒ MÉTODOS DE CLASE: contienen los detalles de implementación
para mensajes a los cuales sólo las clases pueden responder.
Generalmente los métodos de clase permiten: inicializar variables de
clase, crear instancias de la clase, etc.
POO - GIPSI - £ ¥
SINTAXIS DE UN MÉTODO SIN ARGUMENTOS
(MENSAJE UNARIO)
Nombre
“Comentario”
|Variables Temporales|
Cuerpo del Método
⇒⇒ El nombre de un método es el mismo que el nombre del selector del
mensaje, al cual el método debe responder.
⇒⇒ Es usual incluir unas líneas de comentarios entre comillas dobles (“”)
describiendo el método.
⇒⇒ Seguidamente hay que declarar las variables temporales que se van a
usar.
⇒⇒ Estas variables son accesibles únicamente dentro del método y se
destruyen tras la ejecución de él. Finalmente, el cuerpo del método
está constituido por una secuencia de expresiones de mensajes
separadas por puntos (.).
POO - GIPSI - £ ¦
SINTAXIS DE UN MÉTODO SIN ARGUMENTOS
(continuación)
⇒⇒ Cuando un método termina el receptor devuelve un objeto (resultado)
al emisor del mensaje.
⇒⇒ El resultado por defecto es el receptor mismo del mensaje.
⇒⇒ Opcionalmente, se pueden utilizar Expresiones de Retorno para
devolver otro objeto.
Una expresión de retorno es una expresión precedida por:
y
y
(SMALLTALK-80)
^ (SMALLTALK V)
z
  k      % l  $        %  #  { ' #  j % l  $  #  ! #  !  #
m
%  
  !
m |
! %  
m
  !       n     % l  $  
m }
! $ ) $  k    k   
i ~

~  €

i
m }
! $  
 n     % l 
~  
 
i
 ~ ‚

( ƒ
 n  !
 $
POO - GIPSI - £ §
#  j   !  $ $     k      % l  $     { ' #  j % l  ' #    $ % $  ' #  
'  #  $ # $  #  ! #  „
SINTAXIS DE UN MÉTODO SIN ARGUMENTOS
EJEMPLOS
Implementación de los métodos realPart e imaginaryPart de la clase
complex
realPart
“Retorna la componente real del complejo receptor”
…
realPart
imaginaryPart
“Retorna la componente imaginaria del complejo receptor”
#    †  # !
%
m
 ‡ %   # ) †  # !
x v q s ˆ q x w
u
p q ‰
u
r q x Š ˆ q x w
‹
x v q s ˆ q x w Œ
u
p q ‰
u
r q x Š ˆ q x w Œ
   j
POO - GIPSI - £ ¨

imaginaryPart
POO - GIPSI - ¤
©
SINTAXIS DE MÉTODOS CON ARGUMENTOS
SINTAXIS DE UN MÉTODO CON UN ARGUMENTO
(MENSAJE BINARIO)
Selector y Argumento
“Comentario”
|Variables Temporales|
Cuerpo del Método
Se colocará el selector del mensaje seguido de un argumento (parámetro
formal).
EJEMPLO
Implementación del método + de la clase complex
+ unComplejo
“Retorna una instancia de la clase Complex igual a la suma del
receptor y el argumento unComplejo”
|sumaParteReal sumaParteImaginaria|
sumaParteReal Ž realPart + unComplejo realPart.
sumaParteImaginaria Ž imaginaryPart + unComplejo imaginaryPart.
...
POO - GIPSI - ¤
 
SINTAXIS DE MÉTODOS CON ARGUMENTOS
(continuación)
SINTAXIS DE UN MÉTODO CON UNO O MÁS
ARGUMENTOS (MENSAJE DE PALABRA CLAVE)
palabraClave1: argumento1 palabraClave2: argumento2 …
“Comentario”
|Variables Temporales|
Cuerpo del Método
Se colocarán cada una de las palabras claves que forman el selector y
siguiendo a cada palabra clave el carácter ‘:’ y un argumento formal.
POO - GIPSI - ¤ ¡
SINTAXIS DE UN MÉTODO CON UNO O MÁS
ARGUMENTOS (MENSAJE DE PALABRA CLAVE)
EJEMPLOS
Implementación de los métodos realPart: e imaginaryPart: de la clase
complex
realPart: parteReal
“Inicializa la componente real del complejo receptor con parteReal. Retorna
el receptor modificado.”
realPart  parteReal.
imaginaryPart: parteImaginaria
“Inicializa la componente imaginaria del complejo receptor con
parteImaginaria. Retorna el receptor modificado.”
imaginaryPart  parteImaginaria.
POO - GIPSI - ¤ ¢
ESTRUCTURAS DE CONTROL
Como en SMALLTALK todo es objeto, las estructuras de control se
implementan por medio de mensajes enviados a un objeto.
Las estructuras de control que se desarrollarán son:
⇒⇒ SELECCIÓN O ALTERNATIVA: se implementa por medio del
envío de mensajes a los objetos
•• true
•• false.
⇒⇒ ITERACIÓN O REPETICIÓN: se implementa por medio del
envío de mensajes a objetos de las clases:
•• Number.
•• BlockContext.
•• Collection.
POO - GIPSI - ¤ £
SELECCIÓN
⇒⇒ Existen dos objetos de tipo BOOLEAN en el lenguaje y algunos
mensajes enviados a estos objetos permiten la implementación de la
SELECCIÓN en Smalltalk.
⇒⇒ Los mensajes que se envían a los objetos true y false llevan como
parámetro un bloque sin argumentos. La evaluación de dicho bloque
depende del mensaje y del objeto al que se lo envía.
⇒⇒ Los mensajes provistos por Smalltalk permiten el testeo y control
condicional
• simple
• compuesto
POO - GIPSI - ¤ ¤
1 - TESTEO Y CONTROL CONDICIONAL SIMPLE
Sintaxis ifTrue:
objetoBooleano ifTrue: bloque
SMALLTALK evalúa una vez el bloque si el mensaje fue enviado al objeto
true. En cambio si fue enviado al objeto false no realiza ninguna acción.
Sintaxis ifFalse:
objetoBooleano ifFalse: bloque
y el análisis es el inverso.
EJEMPLOS
‘cama’  ‘casa’
ifTrue: [ ’cama’].
El resultado de la evaluación de
‘cama’  ‘casa’ es el objeto true. A
éste se le envía el mensaje ifTrue
con un bloque que pide que retorne el
objeto cadena ‘cama’. Dicho bloque
es evaluado.
‘cama’  ‘casa’
ifTrue: [ ’cama’].
El resultado de la evaluación de
‘cama’  ‘casa’ es el objeto false. A
éste se le envía el mensaje ifTrue
con un bloque que pide que retorne el
objeto cadena ‘cama’. Dicho bloque
no es evaluado.
POO - GIPSI - ¤ ¥
TESTEO Y CONTROL CONDICIONAL SIMPLE
(continuación)
Métodos ifTrue: e ifFalse:
Clase True
ifTrue: bloque
“Responde el valor del bloque ya que el receptor es verdadero”
‘
bloque value
ifFalse: bloque
“Responde la alternativa falsa, nil, ya que el receptor es verdadero”
‘
nil
Clase False
ifTrue: bloque
“Responde la alternativa falsa, nil, ya que el receptor es falso”
‘
nil
ifFalse: bloque
“Responde el valor del bloque ya que el receptor es falso”
‘
bloque value
POO - GIPSI - ¤ ¦
2 - TESTEO Y CONTROL CONDICIONAL COMPUESTO
Sintaxis ifTrue:ifFalse:
objetoBooleano ifTrue: bloqueVerdadero
ifFalse: bloqueFalso
EJEMPLOS
cadena1  cadena2
ifTrue: [’ cadena1]
ifFalse: [’ cadena2]
Si la variable cadena1 apunta a un
objeto cadena que es menor que el
objeto cadena apuntado por cadena2,
retorna cadena1, sino retorna
cadena2.
numero “ numero  0
ifTrue: [numero negated]
ifFalse: [numero]
Si la variable numero apunta a un
objeto numérico que es negativo es
retornado le resultado de enviar a ese
objeto el mensaje negated y este
resultado es asignado nuevamente a
la variable numero. Caso contrario no
se produce ningún cambio.
POO - GIPSI - ¤ §
TESTEO Y CONTROL CONDICIONAL COMPUESTO
(continuación)
Método ifTrue:ifFalse:
Clase True
ifTrue: bloqueVerdadero ifFalse: bloqueFalso
“Responde el valor del bloque Verdadero”
”
bloqueVerdadero value
Clase False
ifTrue: bloqueVerdadero ifFalse: bloqueFalso
“Responde el valor del bloque Falso”
”
bloqueFalso value
POO - GIPSI - ¤ ¨
3 - MENSAJES QUE REPRESENTAN
OPERACIONES LÓGICAS
⇒⇒ Para poder analizar condiciones compuestas, están definidos el
mensaje unario not y los mensajes binarios  (AND) y | (OR) en
ambas clases true y false.
⇒⇒ Llevan un objeto como parámetro; el objeto retornado depende del
objeto al que se le envía el mensaje y del mensaje.
EJEMPLO
numero  0  (numero  50)
ifTrue: [• ’El número está
entre 0 y 50’]
ifFalse: [• ’El número está
fuera del rango’]
Una forma de testear si el valor de un
número está en un rango es utilizar
una condición compuesta. Notar que
el objeto alternativo del  es enviado
entre paréntesis para no tener
problemas con la precedencia.
POO - GIPSI - ¥
©
MENSAJES QUE REPRESENTAN OPERACIONES
LÓGICAS (continuación)
Métodos , | y not
Clase True
not
“Negación lógica. Devuelve falso ya que el receptor es verdadero”–
false
 objeto
“Conjunción lógica. Devuelve el objeto ya que el receptor es verdadero.”–
objeto
| objeto
“Disjunción lógica. Devuelve verdadero ya que el receptor es verdadero.”–
self
Clase False
not
“Negación lógica. Devuelve verdadero ya que el receptor es falso”–
true
 objeto
“Conjunción lógica. Devuelve falso ya que el receptor es falso.”–
self
| objeto
“Disjunción lógica. Devuelve el objeto ya que el receptor es falso.”–
objeto
4 - ALGUNOS MENSAJES QUE RETORNAN LOS
POO - GIPSI - ¥
 
OBJETOS TRUE O FALSE
Los siguientes mensajes binarios retornan los objetos true o false. Este
comportamiento los hace aptos para formar parte de expresiones que reciben
los mensajes que permiten la implementación de la estructura de control
SELECCIÓN.
MENSAJE SIGNIFICADO
== equivalentes (idénticos)
~~ no equivalentes
= iguales
~= no iguales
 = menor, menor o igual
 = mayor, mayor o igual
Ejercicio 1
Crear el método ifTrueThen:else: en la clase Boolean.
Ejercicio 2
POO - GIPSI - ¥ ¡
Escribir un método que reciba como parámetro un número y retorne una de
las siguientes expresiones según corresponda.
El número está entre 0 y 24.
El número está entre 25 y 50.
El número está fuera de rango.
POO - GIPSI - ¥ ¢
].
ITERACIÓN
La iteración en SMALLTALK es soportada mediante el envío de mensajes a
objetos de las clases Number, BlockContext y Collection. La clase
Collection tiene varias subclases, como por ejemplo Array.
Los ciclos que veremos son:
⇒⇒ UN EQUIVALENTE AL CICLO DE CANTIDAD DE
REPETICIONES CONOCIDAS EN SMALLTALK
• to:do: Y to:by:do:
• timesRepeat:
⇒⇒ UN EQUIVALENTE AL CICLO WHILE EN SMALLTALK
• whileTrue:
• whileFalse:
⇒⇒ COLECCIONES: OTRA FORMA DE REPETICIÓN
• do:
• collect:
• select:
• reject:
• detect:
POO - GIPSI - ¥ £
1 - UN EQUIVALENTE AL CICLO DE CANTIDAD DE
REPETICIONES CONOCIDAS EN SMALLTALK
1. a - CICLOS to:do: Y to:by:do:
Un ciclo iterativo simple con un número específico de repeticiones se puede
llevar a cabo usando mensajes de la clase Integer.
El método to: enteroFinal do: unBloque evalúa el argumento unBloque por
cada entero en el intervalo [objeto Receptor, objeto enteroFinal]. El
argumento del bloque toma sucesivamente los valores del intervalo en cada
evaluación del bloque.
Sintaxis:
enteroInicial to: enteroFinal do: [:parámetro | s1. s2. ... sn]
El método to: enteroFinal by: incremento do: unBloque es una variación del
anterior que especifica la cantidad en la cual el argumento del bloque debe
incrementarse en cada evaluación. Para incrementos positivos, la evaluación
repetitiva termina cuando el índice del ciclo es mayor que el enteroFinal.
Para incrementos negativos, el ciclo finaliza cuando el índice del ciclo es
menor que enteroFinal.
Sintaxis:
enteroInicial to: enteroFinal by: incremento do: [:parámetro | s1. s2. ... sn]
POO - GIPSI - ¥ ¤
CICLOS to:do: Y to:by:do:
EJEMPLOS
|unArreglo|
unArreglo — Array new: 10.
1 to: 10 do: [:j |
unArreglo at: j put: 0.0].
1 to: 10 by: 2 do: [:j |
unArreglo at: j put: 3.0].
Se define una variable temporal
llamada unArreglo a la que se le
asigna un objeto arreglo de 10
elementos. Luego se inicializan todos
sus elementos en 0.0. A continuación
se inicializa con 3.0 las posiciones
impares de dicho arreglo.
Ejercicio 3:
Crear un método en la clase entero que se denomine descendiendoHasta:
enteroFinal hacer: unBloque que repita la evaluación de dicho bloque para
cada entero que está entre el receptor del mensaje y enteroFinal
decrementándose en 1.
POO - GIPSI - ¥ ¥
1 - UN EQUIVALENTE AL CICLO DE CANTIDAD DE
REPETICIONES CONOCIDAS EN SMALLTALK
1. b - CICLO timesRepeat:
Otro ciclo iterativo simple con un número específico de repeticiones se
puede llevar a cabo usando el mensaje timesRepeat de la clase Integer. Este
mensaje lleva como parámetro un bloque sin argumentos que se evaluará
tantas veces como lo indique el entero receptor del mismo.
Sintaxis:
entero timesRepeat: [s1. s2. ... sn]
EJEMPLO
|suma|
suma ˜ 0.
4 timesRepeat: [ suma˜ suma + 5 ].™
suma
Obtener el producto de un número
usando sólo suma: resolver 4 * 5
como la suma 4 veces de 5.
|string|
string : = ‘Esta es una cadena de
caracteres’.
(string size) timesRepeat: [...].
...
Notar que el objeto al que se le envía
el mensaje es un entero, que puede
ser el resultado del envío de otro
mensaje. Si se quiere repetir algún
bloque según la longitud de una
string, se debe colocar (string size)
en vez de un entero determinado. Los
paréntesis no son necesarios, fueron
colocados para lograr una mayor
legibilidad.
POO - GIPSI - ¥ ¦
2 - UN EQUIVALENTE AL CICLO WHILE EN
SMALLTALK
Existen dos mensajes a objetos de la clase BlockContext que proveen un
equivalente funcional de los ciclos while de otros lenguajes. Estos mensajes
son whileTrue: y whileFalse:.
Sintaxis:
[bloqueDeTesteo] whileTrue: [bloqueEjecutable] (1)
[bloqueDeTesteo] whileFalse: [bloqueEjecutable] (2)
(1) Primero es evaluado el bloqueDeTesteo. Si es verdadero, entonces es
ejecutado el bloqueEjecutable. Este proceso se repite hasta que el
bloqueDeTesteo es evaluado como falso. Para (2) se sigue una lógica
similar, pero inversa.
Como se puede ver, éste es un ciclo que se repite de 0 a n veces.
EJEMPLO
“Contar las vocales de una string”
|vocales string indice|
vocales š 0.
indice š 0.
string š ‘String con varias vocales”.
[indice  = string size]
whileTrue: [
(string at: indice) isVowel
ifTrue: [vocales š vocales + 1].
indice š indice +1].›
vocales
POO - GIPSI - ¥ §
CLASE BlockContext
Notar que la implementación de los dos mensajes se hace en forma
recursiva.
whileTrue: unBloque
“Evalúa el argumento unBloque mientras el receptor es verdadero.”
œ
self value
ifTrue: [ unBloque value.
self whileTrue: unBloque ]
whileFalse: unBloque
“Evalúa el argumento unBloque mientras el receptor es falso.”
œ
self value
ifFalse: [ unBloque value.
self whileFalse: unBloque ]
POO - GIPSI - ¥ ¨
3 - COLECCIONES: OTRA FORMA DE REPETICIÓN
La clase Collection provee una variedad de esquemas de iteración. Todos
los mensajes llevan como argumento un bloque con un parámetro que es
evaluado una vez por cada elemento en el receptor (cada carácter de una
string, cada elemento de un arreglo, etc.)
Sintaxis:
objetoColección mensaje: [ :parámetro | s1. s2. ... sn ]
El mensaje puede ser alguno de los siguientes:
⇒⇒ do: se ejecuta el bloque argumento tantas veces como elementos
aparezcan en la colección, asignando al parámetro un elemento de la
lista en cada ejecución.
⇒⇒ collect: para cada uno de los elementos del receptor se evalúa el
bloque con ese elemento como parámetro, y devuelve una nueva
colección formada por el resultado de esas evaluaciones.
⇒⇒ select: crea y retorna una subcolección de los elementos del receptor,
que verifican la expresión booleana final del bloque. Es decir que la
expresión sn debe ser booleana.
POO - GIPSI - ¦
©
⇒⇒ reject: crea y retorna una subcolección de los elementos del receptor
que no verifiquen la expresión booleana final del bloque. Es decir que
la expresión sn debe ser booleana.
⇒⇒ detect: devuelve el primer elemento de la lista que verifique la
expresión booleana final del bloque.
EJEMPLOS
|string cuenta|
cuenta  0.
string  ‘Orientacion a Objetos’.
string do: [:caracter | caracter isUppercase
ifTrue: [ cuenta  cuenta + 1 ] ]. (1)
string collect: [:caracter | caracter asUppercase ]. (2)
string select: [:caracter | caracter isUppercase ]. (3)
string reject: [:caracter | caracter isUppercase ]. (4)
string detect: [:caracter | caracter isUppercase ]. (5)
Los resultados de la evaluación de cada mensaje son los siguientes:
(1) 2, que es la cantidad de caracteres en mayúsculas que hay en la string.
(2) ‘ORIENTACION A OBJETOS’, que es la string convertida a
mayúsculas.
(3) ‘OO’, que es la subcadena que está en mayúsculas.
(4) ‘rientacion a bjetos’, que es la subcadena que no está en mayúsculas.
(5) $O, que es el primer elemento (carácter) que está con mayúsculas.
POO - GIPSI - ¦
 
COLECCIONES: OTRA FORMA DE REPETICIÓN
OTROS EJEMPLOS
• Sumar los cinco primeros números primos
|suma|
suma ž 0.
#(2 3 5 7 11) do: [:primo | suma ž suma + primo ].
Ÿ
suma
• Obtener el cuadrado de cada uno de los objetos enteros de un arreglo.
#(1 3 4 9) collect: [:i squared ]
el resultado es: #(1 9 16 81).
• Extraer los objetos números impares de un arreglo.
#(1 3 6 7) select: [:num | num odd ]
el resultado es #(1 3 7).
• Extraer los objetos números pares de un arreglo.
#(1 3 6 7) reject: [:num | num odd ]
el resultado es #(6).
• Extraer el primer objeto número impar de un arreglo.
#(1 3 6 7) detect: [:num | num odd ]
el resultado es el objeto entero 1.
POO - GIPSI - ¦ ¡
ANEXO: VARIABLES COMPARTIDAS
DICCIONARIOS POOL (Pool Dictionaries):
Son colecciones de variables (asociaciones nombre/valor) cuyo ámbito es un
subconjunto definido de clases en el sistema.
VARIABLES POOL
Son variables compartidas por un subconjunto de clases en el sistema y son
almacenadas en diccionarios Pool. No es necesario que exista una relación
de herencia entre las clases que forman este subconjunto.
Para que las variables pool se puedan acceder se debe declarar en la
definición de la clase el nombre del diccionario Pool que las contienen.
VARIABLES GLOBALES
Son variables compartidas por todos los objetos. Existe un diccionario pool
llamado Smalltalk que es accesible globalmente, es decir, es compartido por
todas las clases y contiene todas las variables globales.
Con el mensaje at:put: se agregan nuevas variables a los diccionarios pool.
EJEMPLOS
1. Declaración de una variable (#NombreVariable) con un valor
(valor) en un diccionario (Diccionario).
Diccionario at: #NombreVariable put: valor.
2. Declaración de una variable (#NombreVariable) con un valor
(valor) en el diccionario Smalltalk.
Smalltalk at: #NombreVariable put: valor.

Más contenido relacionado

Destacado (20)

TABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETESTABLA DE COMANDO /SENTENCIAS/PAQUETES
TABLA DE COMANDO /SENTENCIAS/PAQUETES
 
Guia didàctica del material audiovisual
Guia didàctica del material audiovisualGuia didàctica del material audiovisual
Guia didàctica del material audiovisual
 
Dce0 programacion oo_c__vbnet
Dce0 programacion oo_c__vbnetDce0 programacion oo_c__vbnet
Dce0 programacion oo_c__vbnet
 
Clase ii
Clase iiClase ii
Clase ii
 
Programacion oo
Programacion ooProgramacion oo
Programacion oo
 
Tutorial visual basic Grade 11
Tutorial visual basic Grade 11 Tutorial visual basic Grade 11
Tutorial visual basic Grade 11
 
Clase iv
Clase ivClase iv
Clase iv
 
Guia 2 Programacion VB.NET
Guia 2 Programacion VB.NETGuia 2 Programacion VB.NET
Guia 2 Programacion VB.NET
 
Lenguajes de programacion en pps en el Plantel de Zacualpan, Tlaxcala
Lenguajes de programacion en pps en el Plantel de Zacualpan, TlaxcalaLenguajes de programacion en pps en el Plantel de Zacualpan, Tlaxcala
Lenguajes de programacion en pps en el Plantel de Zacualpan, Tlaxcala
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programa c #
Programa c #Programa c #
Programa c #
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetos
 
Encuadre Poo
Encuadre PooEncuadre Poo
Encuadre Poo
 
Poo sistem k.a.
Poo sistem k.a.Poo sistem k.a.
Poo sistem k.a.
 
2 poo u1 7 variables y operaciones booleanas
2 poo u1 7 variables y operaciones booleanas2 poo u1 7 variables y operaciones booleanas
2 poo u1 7 variables y operaciones booleanas
 
Introduccion a la P.O.O
Introduccion a la P.O.OIntroduccion a la P.O.O
Introduccion a la P.O.O
 
Programacion Orientada a Onjetos
Programacion Orientada a OnjetosProgramacion Orientada a Onjetos
Programacion Orientada a Onjetos
 
Tema1
Tema1Tema1
Tema1
 
Lenguajes poo
Lenguajes pooLenguajes poo
Lenguajes poo
 

Similar a Tutorial objetos

Action script 3_basic
Action script 3_basicAction script 3_basic
Action script 3_basicEdna Rheiner
 
Programación orientada-objetos
Programación orientada-objetosProgramación orientada-objetos
Programación orientada-objetoseduardolopezr
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Sergio Sanchez
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep iidani Safres
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Didier Granados
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetosdesimartinez
 
Historia y fundamentos de la programación orientada a objetos
Historia y fundamentos de la programación orientada a objetosHistoria y fundamentos de la programación orientada a objetos
Historia y fundamentos de la programación orientada a objetosRafael Molano
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonwozgeass
 
Python 3
Python 3Python 3
Python 3CHREAR
 
Programaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosProgramaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosJonathan Macías
 

Similar a Tutorial objetos (20)

Lp13
Lp13Lp13
Lp13
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Presentacion3
Presentacion3Presentacion3
Presentacion3
 
03 Oop
03   Oop03   Oop
03 Oop
 
Action script 3_basic
Action script 3_basicAction script 3_basic
Action script 3_basic
 
Programación orientada-objetos
Programación orientada-objetosProgramación orientada-objetos
Programación orientada-objetos
 
Clase15
Clase15Clase15
Clase15
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
Bd oo presentacion
Bd oo presentacionBd oo presentacion
Bd oo presentacion
 
Memch clases lep ii
Memch   clases lep iiMemch   clases lep ii
Memch clases lep ii
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
 
Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetos
 
Historia y fundamentos de la programación orientada a objetos
Historia y fundamentos de la programación orientada a objetosHistoria y fundamentos de la programación orientada a objetos
Historia y fundamentos de la programación orientada a objetos
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en python
 
Python 3
Python 3Python 3
Python 3
 
Unidad_01_01.pdf
Unidad_01_01.pdfUnidad_01_01.pdf
Unidad_01_01.pdf
 
Programaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetosProgramaciom avanzada orientada a objetos
Programaciom avanzada orientada a objetos
 
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓNJAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
JAVA ORIENTADO A OBJETOS - INTRODUCCIÓN
 
Java OO: Introducción
Java OO: IntroducciónJava OO: Introducción
Java OO: Introducción
 

Último

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

Tutorial objetos

  • 1. PROGRAMACIÓN ORIENTADA A OBJETOS EL LENGUAJE SMALLTALK GIPSI
  • 2. POO - GIPSI -   TEMAS: ⇒⇒ Introducción a Smalltalk ⇒⇒ Smalltalk: Conceptos básicos •• Clase •• Instancia •• Mensaje •• Herencia ⇒⇒ Sintaxis del lenguaje •• Expresiones •• Literales ∗∗ tipos •• Variables ∗∗ tipos ∗∗ asignaciones ∗∗ pseudovariables •• Mensajes ∗∗ tipos ∗∗ evaluación de las expresiones de mensajes ∗∗ mensajes en cascada ∗∗ polimorfismo •• Métodos y expresiones de retorno ∗∗ tipos ∗∗ estructura de cada tipo •• Estructura de control: Selección o Alternativa ∗∗ tipos ∗∗ Mensajes de comparación a objetos •• Bloques •• Estructura de control: Repetición o Iteración ∗∗ tipos
  • 3. POO - GIPSI - ¡ Árbol genealógico de los lenguajes OO
  • 4. POO - GIPSI - ¢ Introducción a SMALLTALK 1. SMALLTALK es un lenguaje orientado a objetos puro, pues todas las entidades que maneja son objetos. El lenguaje se basa en conceptos tales como objetos y mensajes. 2. SMALLTALK es descendiente del lenguaje SIMULA y tiene sus orígenes en el Centro de Estudios de Palo Alto de Xerox, en los comienzos de 1970. Su desarrollo se basa en gran parte en las ideas de Alan Kay. Las tres versiones principales del lenguaje son SMALLTALK-72, SMALLTALK-76 y SMALLTALK-80. 3. SMALLTALK es mucho más que un lenguaje de programación, es un ambiente completo de desarrollo de programas. Éste integra de una manera consistente características tales como un editor, un compilador, un debugger, utilitarios de impresión, un sistema de ventanas y un manejador de código fuente. 4. SMALLTALK elimina la frontera entre aplicación y sistema operativo, modelando todos los elementos como objetos.
  • 5. POO - GIPSI - £ La programación en SMALLTALK requiere de al menos los siguientes conocimientos: 1. los conceptos fundamentales del lenguaje: manejo de clases y objetos, mensajes, clases y herencia. 2. la sintaxis y la semántica del lenguaje. 3. cómo interactuar con el ambiente de programación de SMALLTALK para construir nuevas aplicaciones SMALLTALK. 4. las clases fundamentales del sistema, tales como numéricas, colecciones, gráficas y las clases de interfase del usuario. Diseñar nuevas aplicaciones SMALLTALK, requiere de conocimientos sobre las clases existentes en el sistema SMALLTALK. Frecuentemente la programación en SMALLTALK se denomina "Programación por extensión" Las nuevas aplicaciones son construidas por extensión de las librerías de clases de SMALLTALK.
  • 6. POO - GIPSI - ¤ SMALLTALK: CONCEPTOS BÁSICOS Los conceptos básicos son: - Clase - Instancia - Mensaje - Herencia La programación en SMALLTALK consiste en: - Crear clases. - Crear instancias. - Especificar la secuencia de mensajes entre objetos.
  • 7. POO - GIPSI - ¥ CLASE Es una colección de objetos que poseen características y operaciones comunes. Una clase contiene toda la información necesaria para crear nuevos objetos y permite agrupar bajo un mismo nombre las variables y los métodos que manipulan esas variables. Las variables de la clase son accedidas por los métodos m1, m2, m3, ... mn. MÉTODO Es el procedimiento local a una clase. Su activación permite el acceso a las variables de la clase. Variables de la clase Mét Mét Mét ... Mét m1 m2 m3 ... mn
  • 8. POO - GIPSI - ¦ INSTANCIA DE CLASES A partir de una clase se pueden crear tantos elementos como se deseen. A estos elementos creados se los denomina Instancias u Objetos de la clase. Por lo tanto dos instancias diferentes de una misma clase comparten los mismos métodos y la misma lista de variables con valores diferentes. Clase Libro Instancia I1 Instancia I2 título autores editorial añoEdición idioma isbn tema prestado método método método verTítulo prestar devolver [...] [...] [...] título=POO autores=Timothy Budd editorial= Addison- Wesley Iberoamericana añoEdición=1991 idioma=español isbn=0-201-60103-6 tema=POO prestado=true verTitulo, prestar, devolver título=Inside Smalltalk - Vol. I autores=Lalonde-Pugh editorial= Prentice-Hall International añoEdición=1990 idioma=inglés isbn=0-13-438430-3 tema=POO prestado=false verTitulo, prestar, devolver
  • 9. POO - GIPSI - § MENSAJES Es una petición a un objeto para que brinde algún servicio que el objeto puede realizar. ⇒⇒ El mensaje especifica que operación se debe llevar a cabo, pero no cómo realizarla. ⇒⇒ El objeto al que se envía el mensaje se denomina RECEPTOR del mensaje. ⇒⇒ El texto del envío de un mensaje está compuesto de: • el nombre del objeto destinatario denominado RECEPTOR DEL MENSAJE. • un SELECTOR, que es el nombre del método (punto de entrada en el objeto receptor). • y eventualmente, PARÁMETROS del método que se quiere activar, denominados ARGUMENTOS DEL MENSAJE. Instancia I2 Texto del envío del mensaje: I2 prestar selector receptor Variables Método prestar … prestar Valor
  • 10. POO - GIPSI - ¨ HERENCIA ⇒⇒ Permite crear nuevas clases partiendo de otras previamente definidas con características semejantes a la que se quiere crear. ⇒⇒ El mecanismo de herencia nos permite definir las propiedades particulares de un nuevo objeto y heredar las propiedades comunes ya existentes. Herencia en la definición de la clase Cn Clase C1 Hijo de C1 Clase Cn … Hijo de Cn-1 Variables de C1 Métodos de C1 Variables de C2 Métodos de C2 Variables de Cn Métodos de Cn Variables de C1 + Variables de C2 + … + Variables de Cn Métodos de C1 + Métodos de C2 + … + Métodos de Cn
  • 11. POO - GIPSI -   © En SMALLTALK, todas las clases heredan de una única clase llamada Object. Representación ascendente (Bottom-up) parcial de las clases provistas por el Smalltalk SMALLTALK maneja sólo HERENCIA SIMPLE. Object Magnitude Collection Number Time ! # $ # $ ! % ' ' $ ! % ( # # ) $ ! % FloatInteger Date Fraction Bag Set . . . . . . . . .
  • 12. POO - GIPSI -     La herencia se hace sobre las clases y NO sobre las instancias. Una instancia de una clase maneja el conjunto de variables y métodos disponibles en dicha clase. Clase Textos Instanciación título idioma tema nroIdentif verTitulo darDeAlta darDeBaja editorial director volumen número mes año verIndice autores editorial prestado isbn añoEdición prestar devolver verAutor autores nombreRevista perteneceA título=POO autores=Timothy Budd editorial= Addison- Wesley Iberoamericana añoEdición=1991 idioma=español isbn=0-201-60103-6 nroIdentif=194785 tema=POO prestado=true verTitulo, prestar, devolver, verAutor, darDeAlta, darDeBaja Clase Libro Clase Revistas Clase Artículos
  • 13. POO - GIPSI -   ¡ ACTIVACIÓN DE MÉTODOS Cuando una instancia recibe un mensaje, el selector del mensaje podrá o no corresponder con un método local a la clase de la instancia. 1. Si el selector corresponde a un método local de la clase del objeto, entonces hay activación de ese método. 2. Si el selector no corresponde a un método local a la clase del objeto, entonces se busca el método en la superclase de la clase del objeto y así recursivamente hasta encontrar la primera clase del árbol de herencia que posea un método idéntico al selector del mensaje. Como vemos la investigación se hace de abajo a arriba. Clase C1 Herencia Clase C2 Herencia búsqueda del método m1 en la clase C1. Instanciación búsqueda del método m1 en la clase C2. Instancia de C2 mensaje m1 (selector) Object Variables Método m1 Método m2 Variables Método m3
  • 14. POO - GIPSI -   ¢ SINTAXIS DE SMALLTALK La sintaxis de SMALLTALK es: objeto mensaje Por ejemplo • 3 factorial significa que el mensaje factorial es enviado al objeto 3 (instancia de la clase Integer) y por lo tanto se ejecutará el método de nombre factorial que se encuentra en la clase Integer o en sus superclases. • ‘HOLA’ size • #(4 8 6 3) at: 2 • $A asciiValue
  • 15. POO - GIPSI -   £ EXPRESIÓN Smalltalk es un lenguaje basado en expresiones. Una expresión es una secuencia de caracteres que puede ser evaluada. Hay cuatro tipos de expresiones: 1. Literales 2. Nombres de Variables 3. Expresiones de mensajes 4. Expresiones de bloque La interfase de usuario permite la selección y evaluación de estas expresiones.
  • 16. POO - GIPSI -   ¤ TIPOS DE EXPRESIONES 1- LITERALES (constantes literales u objetos constantes) El valor de una expresión literal es siempre el mismo objeto. Hay cinco tipos de constantes literales: 1. Números 2. Caracteres 3. Secuencia de caracteres 4. Símbolos 5. Arreglos NÚMEROS Descripción: Los números son objetos que representan valores numéricos y responden a mensajes que calculan resultados matemáticos. Representación: Secuencia de dígitos precedidos o no de un signo '-' y/o con un punto decimal. Ejemplos: 25 27.5 -35.7 -128 Notación científica: 25.53e2 -8.126e-3.
  • 17. POO - GIPSI -   ¥ CARACTERES Descripción: Los caracteres son objetos que representan los símbolos que forman un alfabeto. Representación: Expresión precedida por el signo $ seguida por cualquier carácter Ejemplos: $a $A $3 $+ $$ SECUENCIA DE CARACTERES Descripción: Son objetos que representan una cadena de caracteres. Responden a mensajes para acceder a caracteres individuales, sustituir secuencias, compararlas con otras secuencias y concatenarlas. Representación: Secuencia de caracteres encerrados entre comillas (‘’). Ejemplos: ‘Hola’ ‘secuencia de caracteres’ ‘Region 001’ Se pueden concatenar cadenas separándolas con coma: ‘Esto es’, ‘una tira’, ‘de caracteres’ equivale a: ‘Esto es una tira de caracteres’.
  • 18. POO - GIPSI -   ¦ SÍMBOLOS Descripción: Son objetos que representan secuencias de caracteres utilizados como nombres en el sistema. Representación: Secuencia de caracteres alfanuméricos precedidos por el carácter ‘#’. Ejemplos: #simbolo #B450 #region Los nombres de clases en SMALLTALK son nombres simbólicos: #Figuras #Cuenta #Pila. ARREGLOS Descripción: Son objetos estructurados cuyos elementos son accesibles mediante un índice entero. Cada elemento del array es un literal. Estos objetos responden a mensajes que piden acceso a su contenido. Representación: Secuencia de literales separados por blancos y encerrados entre paréntesis y precedidas por el carácter ‘#’. Los símbolos y arreglos contenidos como literales en el arreglo, no se preceden con el carácter ‘#’ Ejemplos: #(1 2 3) arreglo de tres elementos enteros. #(‘producto’ ‘120’ ‘factura’ ‘cantidad’) arreglo de cuatro elementos que son secuencias de caracteres. #(‘elemento’ (1 $4 ‘uno’) 4 $A) arreglo de cuatro elementos: secuencia, array, entero y carácter.
  • 19. POO - GIPSI -   § 2- VARIABLES Y ASIGNACIÓN TODA VARIABLE EN SMALLTALK ES UN OBJETO PUNTERO QUE PERMITE REFERENCIAR OTRO OBJETO Los nombres de variables en SMALLTALK son identificadores que consisten en una secuencia de letras y dígitos que comienza con una letra. Una expresión de asignación consta de la variable cuyo valor va a cambiarse, seguido de un prefijo de asignación: una flecha apuntando hacia la izquierda (‘0 ’) en SMALLTALK-80 o un ‘:=‘ en SMALLTALK V. variable 1 1 expresión (SMALLTALK-80) variable := expresión (SMALLTALK V)
  • 20. POO - GIPSI -   ¨ VARIABLES Y ASIGNACIÓN EJEMPLOS x 2 2 ‘Una cadena’ la variable x apunta al objeto ‘Una cadena’ Una variable puede contener diferentes punteros a objetos a lo largo de la ejecución x 3 ‘Una cadena’ ... x 3 23 factorial ... x 3 Array new: 5 ‘Una cadena’ x
  • 21. POO - GIPSI - ¡ © TIPOS DE VARIABLES Hay dos tipos de variables: 1. variables privadas. 2. variables compartidas Las VARIABLES PRIVADAS sólo son accesibles por un objeto. Las VARIABLES COMPARTIDAS pueden ser accedidas por más de un objeto. Los nombres de las variables privadas deben comenzar con una letra minúscula y los nombres de las variables compartidas deben comenzar con letra mayúscula. NúmeroPatas = 4 raza nombre edad darNombre [...] Clase Perro raza = ‘cocker’ nombre = ‘Peluche’ edad = 5 darNombre raza = ‘caniche’ nombre = ‘Toy’ edad = 3 darNombre raza = ‘boxer’ nombre = ‘Guardián’ edad = 7 darNombre
  • 22. POO - GIPSI - ¡   VARIABLES PRIVADAS CLASIFICACIÓN VARIABLES PRIVADAS VARIABLES DE INSTANCIA VARIABLES TEMPORALES VARIABLES DE INSTANCIA NOMBRADAS VARIABLES DE INSTANCIA INDEXADAS ARGUMENTOS DE MÉTODOS ARGUMENTOS DE BLOQUES TEMPORALES DE BLOQUES TEMPORALES DE MÉTODOS
  • 23. POO - GIPSI - ¡ ¡ VARIABLES COMPARTIDAS CLASIFICACIÓN VARIABLES COMPARTIDAS VARIABLES DE CLASE VARIABLES GLOBALES VARIABLES POOL
  • 24. POO - GIPSI - ¡ ¢ VARIABLES PRIVADAS VARIABLES DE INSTANCIA ⇒⇒ Aunque todas las instancias de una clase tienen el mismo conjunto de variables de instancia, sus valores son únicos a cada una de las mismas. ⇒⇒ Sólo pueden ser accedidas en métodos de instancia disponibles en la clase. Las variables de instancia existen durante todo el tiempo de vida de un objeto y representan el estado del objeto. 1. Variables de Instancia Nombradas Son variables que tienen asociado un nombre y son identificadas por él. 2. Variables de Instancia Indexadas Son variables que no tienen nombre y sólo pueden accederse enviando un mensaje a la instancia con un índice que especifique a cual de las variables indexadas se desea acceder. Los dos mensajes principales de indexación son: at:, at:put:. EJEMPLO: arreglo 4 Array new: 5 Retorna una instancia de la clase Array. arreglo at: 1 put: ‘abc’ La primera variable de instancia de arreglo es inicializada con la cadena ‘abc’. arreglo at: 1 Retorna el valor de la primera variable de instancia: ‘abc’.
  • 25. POO - GIPSI - ¡ £ VARIABLES PRIVADAS (continuación) VARIABLES TEMPORALES ⇒⇒ Son las variables que están definidas en los métodos, bloques o programas Smalltalk. Se utilizan en una actividad dada y después se destruyen. ⇒⇒ Representan un estado transitorio de un objeto, existen mientras dura la activación del método, bloque o programa. EJEMPLOS 1. Uso de variables temporales en un programa: | complejo1 complejo2 suma | complejo1 5 Complex newWithReal: -5.9 andImaginary: 4.3. complejo2 5 Complex newWithReal: 8.5 andImaginary: 1.0. suma 5 complejo1 + complejo2. ...
  • 26. POO - GIPSI - ¡ ¤ EJEMPLOS (continuación) 2. Uso de variables temporales de método y parámetros de método en el método de instancia + de la clase Complex: + unComplejo “Retorna una instancia de la clase Complex igual a la suma del receptor y el argumento unComplejo” |sumaParteReal sumaParteImaginaria| sumaParteReal 6 realPart + unComplejo realPart. sumaParteImaginaria 6 imaginaryPart + unComplejo imaginaryPart. ... realPart imaginaryPart realPart imaginaryPart + Clase Complex
  • 27. POO - GIPSI - ¡ ¥ VARIABLES COMPARTIDAS VARIABLES DE CLASE ⇒⇒ Son variables compartidas por todas las instancias de una clase y sus subclases. Tienen el mismo valor para todas las instancias. Sólo pueden ser accedidas por los métodos de clase y los métodos de instancia de la clase y sus subclases. EJEMPLO Object subclass: #Perro instanceVariableNames: ‘raza nombre edad’ classVariableNames: ‘NumeroPatas’ poolDictionaries: ‘’ NúmeroPatas = 4 raza nombre edad darNombre [...] Clase Perro
  • 28. POO - GIPSI - ¡ ¦ PSEUDOVARIABLES Existen cinco pseudovariables: nil, true, false, self y super. ⇒⇒ El valor de una pseudovariable no puede cambiarse con una expresión de asignación. ⇒⇒ nil, true y false son instancias de clases. ⇒⇒ self y super son objetos cuyo significado depende del contexto donde se usen. ⇒⇒ Las cinco son palabras reservadas y son globales. nil es el valor por defecto de una variable. Es usado para representar el valor de objetos no inicializados. true es la única instancia de la clase True y representa el valor booleano VERDADERO. false es la única instancia de la clase False y representa el valor booleano FALSO. self es usada en métodos; su valor es siempre el objeto que recibe el mensaje que causa que el método que contiene self sea ejecutado. super es usada en métodos. Su valor es equivalente a self, el objeto que recibe el mensaje que causa que el método que contiene super sea ejecutado, pero la estrategia de búsqueda del método es diferente. La búsqueda comienza en la superclase inmediata de la clase que contiene el método en el cual super aparece. Los mensajes a super son utilizados cuando se quiere utilizar un método de una superclase que es redefinido en una subclase.
  • 29. POO - GIPSI - ¡ § USO DE SELF Y SUPER Texto del envío del mensaje: ca otroMetodo. Posibles implementaciones del método de instancia otroMetodo: OtroMetodo ... self hacerAlgo. (ejecuta definición realizada en la clase B) OtroMetodo ... super hacerAlgo. (ejecuta definición realizada en la clase A) ... hacerAlgo otroMetodo [...] [...] ... Clase B ... ...... Clase C ... hacerAlgo [...] Clase A Instancia ca
  • 30. POO - GIPSI - ¡ ¨ 3- EXPRESIONES DE MENSAJES Las expresiones de mensajes en SMALLTALK describen quién es el receptor del mensaje, el nombre del mensaje y los argumentos. Por ejemplo: 16.79 rounded ‘hola que tal’ size ‘hola’ includes: $o numerador + (unaFracción verNumerador). Receptor Mensaje Por ejemplo en la expresión SMALLTALK ‘hola’ includes: $o, la cadena ‘hola’ es el receptor del mensaje; includes: es el selector (nombre del mensaje) que identifica unívocamente la operación que es seleccionada y $o es el argumento necesario para realizar la operación. La expresión es evaluada de la siguiente manera: 1. el mensaje includes: $o es enviado al objeto cadena ‘hola’. 2. el objeto cadena sabe como responder a este mensaje y el objeto booleano true es retornado como un resultado. Selector/Argumentos includes: $o Receptor ‘hola’
  • 31. POO - GIPSI - ¢ © TIPOS DE MENSAJES SMALLTALK soporta tres tipos primitivos de mensajes: - UNARIOS (unary) - BINARIOS (binary) - de PALABRA CLAVE (keyword)
  • 32. POO - GIPSI - ¢   MENSAJES UNARIOS Los mensajes unarios no tienen argumentos, su sintaxis comprende solamente un receptor y un selector. EJEMPLOS 7 isPrime: el mensaje consistente del selector isPrime es enviado al objeto entero 7. El objeto true es retornado como el resultado. $a asInteger el mensaje consistente del selector asInteger es enviado al objeto carácter a. El objeto entero representando el valor ordinal del carácter es retornado como el resultado. car isVowel el mensaje consistente del selector isVowel es enviado al objeto variable car. El objeto true o false es retornado como resultado. Carta new el mensaje consistente del selector new es enviado a la clase Carta. Crea una nueva instancia de la clase Carta.
  • 33. POO - GIPSI - ¢ ¡ MENSAJES BINARIOS ⇒⇒ Además del receptor y selector, la sintaxis de los mensajes binarios tiene un único argumento. Los selectores para los mensajes binarios son caracteres especiales simples o dobles. ⇒⇒ Los selectores de carácter simple incluyen operadores de comparación y aritméticos tales como: + - * / = ⇒⇒ Los selectores de carácter doble incluyen operadores tales como ~= (not =) = // (división entera) EJEMPLOS 1.5 + 6.3e2 el mensaje + 6.3e2 es enviado al objeto float 1.5. El selector es + y el argumento es el objeto 6.3e2. El resultado retornado es el objeto float 631.5. ‘abc’ ~ = ‘def’ el mensaje ~ = ‘def’ es enviado al objeto cadena ‘abc’. El selector es ~ = y el argumento es el objeto cadena ‘def’. El receptor y el argumento cadena son comparados por desigualdad. El objeto booleano true es retornado. ‘hola ’,’que tal’ el mensaje , ‘que tal’ es enviado al objeto cadena ‘hola‘. El selector es , y el argumento es el objeto ‘que tal’. El objeto cadena ‘hola que tal’ es retornado.
  • 34. POO - GIPSI - ¢ ¢ MENSAJES DE PALABRA CLAVE ⇒⇒ Estos mensajes contienen una o más palabras claves, donde cada palabra clave tiene un argumento simple asociado con ella. ⇒⇒ El nombre de la palabra clave siempre termina en dos puntos (:). Los dos puntos son parte del nombre (éste no es un terminador especial). ⇒⇒ El selector en un mensaje de más de una palabra clave se forma concatenando todas las palabras claves, por ejemplo between:and:, at:put:, etc.
  • 35. POO - GIPSI - ¢ £ MENSAJES DE PALABRA CLAVE EJEMPLOS 28 gcd: 12 el mensaje gcd: 12 es enviado al objeto entero 28, el selector es gcd: y el argumento es el objeto entero 12. El resultado que se retorna es el máximo común divisor entre el objeto receptor 28 y el objeto argumento 12, es decir, el objeto 4. #(4 3 2 1) at: 4 el mensaje at: 4 es enviado al objeto arreglo (4 3 2 1). El selector es at: y el argumento es el objeto entero 4. El resultado retornado es el objeto entero 1, el objeto asociado con el índice 4 en el arreglo. vector at: 2 put: ‘st’ El mensaje at: 2 put: ’st‘ es enviado a la variable vector, el selector es at:put: y los argumentos son los objetos 2 y ‘st’. El resultado es colocar el objeto cadena ‘st’ como segundo elemento en el objeto arreglo apuntado por la variable vector. Array new: 3 El mensaje new: 3 es enviado a la clase Array. El selector es new: y el argumento es el objeto entero 3. El resultado retornado es una instancia de la clase Array de 3 elementos.
  • 36. POO - GIPSI - ¢ ¤ EVALUACIÓN DE LAS EXPRESIONES DE MENSAJES El receptor o argumento de una expresión de mensajes puede ser en si mismo una expresión de mensajes. Esto da origen a expresiones complejas de mensajes y a la necesidad de un orden de evaluación. Por ejemplo, el siguiente mensaje contiene mensajes de los tres tipos: 4 factorial gcd: 4 * 6 unario pal. clave binario En SMALLTALK la relación de precedencia en la evaluación de expresiones es la siguiente: 1. expresiones entre paréntesis. 2. expresiones unarias (evaluadas de izquierda a derecha). 3. expresiones binarias (evaluadas de izquierda a derecha). 4. expresiones de palabra clave. 5. expresiones de asignación.
  • 37. POO - GIPSI - ¢ ¥ EVALUACIÓN DE LAS EXPRESIONES DE MENSAJES EJEMPLOS EXPRESIONES DE MENSAJES RESULTADOS DE LA EVALUACIÓN 2 factorial negated 7 3 + 4 * 6 + 3 7 2 / 3 * 5 / 7 7 2 / (3 * 5) / 7 7 15 gcd: 32 // 2 7 2 factorial + 4 7 5 between: 1 and: 16 squared + 4 7 Resul 8 4 factorial gcd: 4 * 6 7 #(1 2 $a), #($b ‘cd’) 7 ‘maría’ at: 1 put: $M 7
  • 38. POO - GIPSI - ¢ ¦ MENSAJES EN CASCADA ⇒⇒ Un mensaje en cascada es una forma práctica de especificar que varios mensajes se envían al mismo receptor. ⇒⇒ En el mensaje en cascada se escribe el receptor seguido por la lista de expresiones de mensajes separados por punto y coma (;). Por ejemplo, si se desea modificar los tres primeros elementos del objeto arreglo unArreglo, debe usarse el mensaje at: indice put: unValor, que modifica el elemento indice de unArreglo. La expresión de la izquierda envía el mismo mensaje a unArreglo tres veces. Alternativamente se puede emplear la expresión de la derecha que tiene los mensajes en cascada. UnArreglo at: 1 put: 3. UnArreglo at: 2 put: 8. UnArreglo at: 3 put: 5. unArreglo at: 1 put: 3; at: 2 put: 8; at: 3 put: 5. Conjunto 9 Set new. Conjunto add:1. Conjunto add:2. Conjunto add:3. Set new add: 1; add: 2; add: 3. El empleo de cascadas elimina, a menudo, la necesidad de las variables temporales.
  • 39. POO - GIPSI - ¢ § POLIMORFISMO (VINCULACIÓN DINÁMICA Y SOBRECARGA DE MENSAJES) El mismo mensaje puede ser interpretado de diferentes formas por diferentes objetos. Por ejemplo: 5 + 100 (200 @ 200) + 100 Ambos usan el mensaje + 100, pero los objetos receptores reaccionan al mensaje de maneras muy diferentes. En el primer ejemplo el receptor es el objeto entero 5 y el selector + es interpretado como la suma de enteros. En el segundo ejemplo el receptor es el objeto punto (x, y) con coordenadas (200, 200). En esta expresión el selector + es interpretado como la suma definida sobre puntos. El punto con coordenadas (x, y) igual a 300 es retornado. Es el receptor del mensaje el que determina como es interpretado el mensaje El método suma realmente invocado por una expresión tal como unObjeto + 100 es determinado por el tipo de objeto que recibe el mensaje en el tiempo de ejecución. Esto se denomina vinculación dinámica. Cuando el mismo selector es aceptado por clases diferentes de objetos, se dice que el selector está sobrecargado.
  • 40. POO - GIPSI - ¢ ¨ POLIMORFISMO EJEMPLO El método between:and: trabaja con varios tipos de argumentos. El método between:and: está definido en la clase abstracta Magnitude y prueba si el receptor está entre dos extremos. Efectúa la comprobación por medio del envío del mensaje =. x between: 2 and: 4. mensaje between:and: enviado a un objeto entero. x between: $a and: $z. mensaje between:and: enviado a un objeto carácter. x between: 2@4 and: 12@14. mensaje between:and: enviado a un objeto punto. ‘carbon’ between: ‘carbohidrato’ and: ‘carbonato’. mensaje between:and: enviado a un objeto cadena. y @ 2. z @ $d. (y between: 1 and: 3) and: (z between: $b and: $t).
  • 41. POO - GIPSI - £ © 5 - EXPRESIONES DE BLOQUES ⇒⇒ Son instancias de la clase BlockContext y representan una secuencia de expresiones separadas por puntos y encerradas entre corchetes ‘[]’ que serán evaluadas sólo cuando el mensaje value adecuado sea enviado al bloque. ⇒⇒ La evaluación de un bloque retorna el resultado de la evaluación de la última expresión del mismo. A B C D E F B G H I P Q R S T P U V S W X Y R S U ` P Q R S T P a V S W X Y R S a ` ` ` ` b ⇒⇒ Los bloques, como cualquier otro objeto, pueden ser asignados a variables y definidos en métodos o programas Smalltalk.
  • 42. POO - GIPSI - £   EXPRESIONES DE BLOQUES (continuación) ⇒⇒ Los bloques pueden tener parámetros (variables temporales argumentos de bloque) y variables locales (variables temporales de bloque). c d e f g h d i p q r s t u v w x y u €  r s t u v w x y u € ‚ r s t u v w x y u € ƒ „ „ „ … … † € ‡ t †  † € ‡ t † ‚ „ „ „ † € ‡ t † ˆ … € ‰  x y €  w x ˆ ‘ t  x  „ € ‰  x y € ‚ w x ˆ ‘ t  x ‚ „ „ „ „ ’ “ ” • % • • ! “ ' # – — ! # • ˜ • ! % % ™ $ % • ! % ! • — • d • e f ⇒⇒ unBloque value ⇒⇒ unBloque value: parámetro ⇒⇒ unBloque value: parámetro1 value: parámetro2 ⇒⇒ unBloque value: parámetro1 value: parámetro2 value: parámetro3 ⇒⇒ unBloque valueWithArguments: unArregloDeParámetros
  • 43. POO - GIPSI - £ ¡ EXPRESIONES DE BLOQUES EJEMPLOS [‘evaluación retardada’ size] value. Bloque con una expresión de mensaje. Se evalúa la expresión y es retornado el objeto entero 20 que representa en tamaño en caracteres del objeto cadena ‘evaluación retardada’. [Date today dayName. ‘cadena a convertir’ asUpperCase. ] value. Bloque con más de una expresión de mensaje. Se evalúan las expresiones una a una y es retornado el objeto cadena ‘CADENA A CONVERTIR’ que representa el resultado de la evaluación de la última expresión del bloque. | unBloque| unBloque g [ $o isVowel. ‘9 Sep 1995’ asDate dayName.] . ... unBloque value asUpperCase. Asignación de un bloque a una variable temporal. En este caso el bloque es evaluado cuando se envía el mensaje value al objeto “apuntado” por unBloque, ya que el contenido de esta variable es el código a evaluar. El resultado es el objeto cadena que corresponde al día de la semana de la fecha utilizada, al que luego se le envía el mensaje para que sea convertida en mayúsculas.
  • 44. POO - GIPSI - £ ¢ EXPRESIONES DE BLOQUES EJEMPLOS (continuación) | unBloque| unBloque h [ :a :b | (Pen new dragon: a) go: b; mandala: a diameter: b. ] . ... unBloque value: 10 value: 100. Asignación de un bloque con argumentos a una variable temporal. Como en el caso anterior el bloque es evaluado en el momento en el que se le envía el mensaje value: 10 value: 100. Dentro del bloque se crea una instancia de la clase Pen y se le envía el mensaje dragon: a. Luego a la instancia de la clase Pen se le envían en cascada los mensajes go: b y mandala: a diameter: b. (Ver figura 1)
  • 45. POO - GIPSI - £ £ FIGURA 1: VENTANA DE TRABAJO DE SMALLTALK V i j ! $ $ k % l $ i j ! $ $ m j n o i j ! $ $ m j n p q r o q s q t o u q p v w v x t
  • 46. POO - GIPSI - £ ¤ MÉTODOS Y EXPRESIONES DE RETORNO ⇒⇒ Los métodos de una clase son los procedimientos que se activan ante la recepción de un mensaje. ⇒⇒ La forma en que un objeto responde a un mensaje está descripta en un Método. Cada clase contiene la lista de métodos que le permiten a sí misma y a sus instancias responder a los mensajes que le son enviados. MÉTODOS: CLASIFICACIÓN Los mensajes pueden ser enviados a las clases o las instancias. Por lo tanto los métodos que se activan ante dichos mensajes también deberán estar asociados a las clases o a las instancias: ⇒⇒ MÉTODOS DE INSTANCIA: contienen los detalles de implementación para mensajes a los cuales sólo las instancias de una clase pueden responder. ⇒⇒ MÉTODOS DE CLASE: contienen los detalles de implementación para mensajes a los cuales sólo las clases pueden responder. Generalmente los métodos de clase permiten: inicializar variables de clase, crear instancias de la clase, etc.
  • 47. POO - GIPSI - £ ¥ SINTAXIS DE UN MÉTODO SIN ARGUMENTOS (MENSAJE UNARIO) Nombre “Comentario” |Variables Temporales| Cuerpo del Método ⇒⇒ El nombre de un método es el mismo que el nombre del selector del mensaje, al cual el método debe responder. ⇒⇒ Es usual incluir unas líneas de comentarios entre comillas dobles (“”) describiendo el método. ⇒⇒ Seguidamente hay que declarar las variables temporales que se van a usar. ⇒⇒ Estas variables son accesibles únicamente dentro del método y se destruyen tras la ejecución de él. Finalmente, el cuerpo del método está constituido por una secuencia de expresiones de mensajes separadas por puntos (.).
  • 48. POO - GIPSI - £ ¦ SINTAXIS DE UN MÉTODO SIN ARGUMENTOS (continuación) ⇒⇒ Cuando un método termina el receptor devuelve un objeto (resultado) al emisor del mensaje. ⇒⇒ El resultado por defecto es el receptor mismo del mensaje. ⇒⇒ Opcionalmente, se pueden utilizar Expresiones de Retorno para devolver otro objeto. Una expresión de retorno es una expresión precedida por: y y (SMALLTALK-80) ^ (SMALLTALK V) z k % l $ % # { ' # j % l $ # ! # ! # m % ! m | ! % m ! n % l $ m } ! $ ) $ k k i ~ ~  € i m } ! $ n % l ~  i ~ ‚ ( ƒ n ! $
  • 49. POO - GIPSI - £ § # j ! $ $ k % l $ { ' # j % l ' # $ % $ ' # ' # $ # $ # ! # „ SINTAXIS DE UN MÉTODO SIN ARGUMENTOS EJEMPLOS Implementación de los métodos realPart e imaginaryPart de la clase complex realPart “Retorna la componente real del complejo receptor” … realPart imaginaryPart “Retorna la componente imaginaria del complejo receptor” # † # ! % m ‡ % # ) † # ! x v q s ˆ q x w u p q ‰ u r q x Š ˆ q x w ‹ x v q s ˆ q x w Œ u p q ‰ u r q x Š ˆ q x w Œ j
  • 50. POO - GIPSI - £ ¨  imaginaryPart
  • 51. POO - GIPSI - ¤ © SINTAXIS DE MÉTODOS CON ARGUMENTOS SINTAXIS DE UN MÉTODO CON UN ARGUMENTO (MENSAJE BINARIO) Selector y Argumento “Comentario” |Variables Temporales| Cuerpo del Método Se colocará el selector del mensaje seguido de un argumento (parámetro formal). EJEMPLO Implementación del método + de la clase complex + unComplejo “Retorna una instancia de la clase Complex igual a la suma del receptor y el argumento unComplejo” |sumaParteReal sumaParteImaginaria| sumaParteReal Ž realPart + unComplejo realPart. sumaParteImaginaria Ž imaginaryPart + unComplejo imaginaryPart. ...
  • 52. POO - GIPSI - ¤   SINTAXIS DE MÉTODOS CON ARGUMENTOS (continuación) SINTAXIS DE UN MÉTODO CON UNO O MÁS ARGUMENTOS (MENSAJE DE PALABRA CLAVE) palabraClave1: argumento1 palabraClave2: argumento2 … “Comentario” |Variables Temporales| Cuerpo del Método Se colocarán cada una de las palabras claves que forman el selector y siguiendo a cada palabra clave el carácter ‘:’ y un argumento formal.
  • 53. POO - GIPSI - ¤ ¡ SINTAXIS DE UN MÉTODO CON UNO O MÁS ARGUMENTOS (MENSAJE DE PALABRA CLAVE) EJEMPLOS Implementación de los métodos realPart: e imaginaryPart: de la clase complex realPart: parteReal “Inicializa la componente real del complejo receptor con parteReal. Retorna el receptor modificado.” realPart  parteReal. imaginaryPart: parteImaginaria “Inicializa la componente imaginaria del complejo receptor con parteImaginaria. Retorna el receptor modificado.” imaginaryPart  parteImaginaria.
  • 54. POO - GIPSI - ¤ ¢ ESTRUCTURAS DE CONTROL Como en SMALLTALK todo es objeto, las estructuras de control se implementan por medio de mensajes enviados a un objeto. Las estructuras de control que se desarrollarán son: ⇒⇒ SELECCIÓN O ALTERNATIVA: se implementa por medio del envío de mensajes a los objetos •• true •• false. ⇒⇒ ITERACIÓN O REPETICIÓN: se implementa por medio del envío de mensajes a objetos de las clases: •• Number. •• BlockContext. •• Collection.
  • 55. POO - GIPSI - ¤ £ SELECCIÓN ⇒⇒ Existen dos objetos de tipo BOOLEAN en el lenguaje y algunos mensajes enviados a estos objetos permiten la implementación de la SELECCIÓN en Smalltalk. ⇒⇒ Los mensajes que se envían a los objetos true y false llevan como parámetro un bloque sin argumentos. La evaluación de dicho bloque depende del mensaje y del objeto al que se lo envía. ⇒⇒ Los mensajes provistos por Smalltalk permiten el testeo y control condicional • simple • compuesto
  • 56. POO - GIPSI - ¤ ¤ 1 - TESTEO Y CONTROL CONDICIONAL SIMPLE Sintaxis ifTrue: objetoBooleano ifTrue: bloque SMALLTALK evalúa una vez el bloque si el mensaje fue enviado al objeto true. En cambio si fue enviado al objeto false no realiza ninguna acción. Sintaxis ifFalse: objetoBooleano ifFalse: bloque y el análisis es el inverso. EJEMPLOS ‘cama’ ‘casa’ ifTrue: [ ’cama’]. El resultado de la evaluación de ‘cama’ ‘casa’ es el objeto true. A éste se le envía el mensaje ifTrue con un bloque que pide que retorne el objeto cadena ‘cama’. Dicho bloque es evaluado. ‘cama’ ‘casa’ ifTrue: [ ’cama’]. El resultado de la evaluación de ‘cama’ ‘casa’ es el objeto false. A éste se le envía el mensaje ifTrue con un bloque que pide que retorne el objeto cadena ‘cama’. Dicho bloque no es evaluado.
  • 57. POO - GIPSI - ¤ ¥ TESTEO Y CONTROL CONDICIONAL SIMPLE (continuación) Métodos ifTrue: e ifFalse: Clase True ifTrue: bloque “Responde el valor del bloque ya que el receptor es verdadero” ‘ bloque value ifFalse: bloque “Responde la alternativa falsa, nil, ya que el receptor es verdadero” ‘ nil Clase False ifTrue: bloque “Responde la alternativa falsa, nil, ya que el receptor es falso” ‘ nil ifFalse: bloque “Responde el valor del bloque ya que el receptor es falso” ‘ bloque value
  • 58. POO - GIPSI - ¤ ¦ 2 - TESTEO Y CONTROL CONDICIONAL COMPUESTO Sintaxis ifTrue:ifFalse: objetoBooleano ifTrue: bloqueVerdadero ifFalse: bloqueFalso EJEMPLOS cadena1 cadena2 ifTrue: [’ cadena1] ifFalse: [’ cadena2] Si la variable cadena1 apunta a un objeto cadena que es menor que el objeto cadena apuntado por cadena2, retorna cadena1, sino retorna cadena2. numero “ numero 0 ifTrue: [numero negated] ifFalse: [numero] Si la variable numero apunta a un objeto numérico que es negativo es retornado le resultado de enviar a ese objeto el mensaje negated y este resultado es asignado nuevamente a la variable numero. Caso contrario no se produce ningún cambio.
  • 59. POO - GIPSI - ¤ § TESTEO Y CONTROL CONDICIONAL COMPUESTO (continuación) Método ifTrue:ifFalse: Clase True ifTrue: bloqueVerdadero ifFalse: bloqueFalso “Responde el valor del bloque Verdadero” ” bloqueVerdadero value Clase False ifTrue: bloqueVerdadero ifFalse: bloqueFalso “Responde el valor del bloque Falso” ” bloqueFalso value
  • 60. POO - GIPSI - ¤ ¨ 3 - MENSAJES QUE REPRESENTAN OPERACIONES LÓGICAS ⇒⇒ Para poder analizar condiciones compuestas, están definidos el mensaje unario not y los mensajes binarios (AND) y | (OR) en ambas clases true y false. ⇒⇒ Llevan un objeto como parámetro; el objeto retornado depende del objeto al que se le envía el mensaje y del mensaje. EJEMPLO numero 0 (numero 50) ifTrue: [• ’El número está entre 0 y 50’] ifFalse: [• ’El número está fuera del rango’] Una forma de testear si el valor de un número está en un rango es utilizar una condición compuesta. Notar que el objeto alternativo del es enviado entre paréntesis para no tener problemas con la precedencia.
  • 61. POO - GIPSI - ¥ © MENSAJES QUE REPRESENTAN OPERACIONES LÓGICAS (continuación) Métodos , | y not Clase True not “Negación lógica. Devuelve falso ya que el receptor es verdadero”– false objeto “Conjunción lógica. Devuelve el objeto ya que el receptor es verdadero.”– objeto | objeto “Disjunción lógica. Devuelve verdadero ya que el receptor es verdadero.”– self Clase False not “Negación lógica. Devuelve verdadero ya que el receptor es falso”– true objeto “Conjunción lógica. Devuelve falso ya que el receptor es falso.”– self | objeto “Disjunción lógica. Devuelve el objeto ya que el receptor es falso.”– objeto 4 - ALGUNOS MENSAJES QUE RETORNAN LOS
  • 62. POO - GIPSI - ¥   OBJETOS TRUE O FALSE Los siguientes mensajes binarios retornan los objetos true o false. Este comportamiento los hace aptos para formar parte de expresiones que reciben los mensajes que permiten la implementación de la estructura de control SELECCIÓN. MENSAJE SIGNIFICADO == equivalentes (idénticos) ~~ no equivalentes = iguales ~= no iguales = menor, menor o igual = mayor, mayor o igual Ejercicio 1 Crear el método ifTrueThen:else: en la clase Boolean. Ejercicio 2
  • 63. POO - GIPSI - ¥ ¡ Escribir un método que reciba como parámetro un número y retorne una de las siguientes expresiones según corresponda. El número está entre 0 y 24. El número está entre 25 y 50. El número está fuera de rango.
  • 64. POO - GIPSI - ¥ ¢ ]. ITERACIÓN La iteración en SMALLTALK es soportada mediante el envío de mensajes a objetos de las clases Number, BlockContext y Collection. La clase Collection tiene varias subclases, como por ejemplo Array. Los ciclos que veremos son: ⇒⇒ UN EQUIVALENTE AL CICLO DE CANTIDAD DE REPETICIONES CONOCIDAS EN SMALLTALK • to:do: Y to:by:do: • timesRepeat: ⇒⇒ UN EQUIVALENTE AL CICLO WHILE EN SMALLTALK • whileTrue: • whileFalse: ⇒⇒ COLECCIONES: OTRA FORMA DE REPETICIÓN • do: • collect: • select: • reject: • detect:
  • 65. POO - GIPSI - ¥ £ 1 - UN EQUIVALENTE AL CICLO DE CANTIDAD DE REPETICIONES CONOCIDAS EN SMALLTALK 1. a - CICLOS to:do: Y to:by:do: Un ciclo iterativo simple con un número específico de repeticiones se puede llevar a cabo usando mensajes de la clase Integer. El método to: enteroFinal do: unBloque evalúa el argumento unBloque por cada entero en el intervalo [objeto Receptor, objeto enteroFinal]. El argumento del bloque toma sucesivamente los valores del intervalo en cada evaluación del bloque. Sintaxis: enteroInicial to: enteroFinal do: [:parámetro | s1. s2. ... sn] El método to: enteroFinal by: incremento do: unBloque es una variación del anterior que especifica la cantidad en la cual el argumento del bloque debe incrementarse en cada evaluación. Para incrementos positivos, la evaluación repetitiva termina cuando el índice del ciclo es mayor que el enteroFinal. Para incrementos negativos, el ciclo finaliza cuando el índice del ciclo es menor que enteroFinal. Sintaxis: enteroInicial to: enteroFinal by: incremento do: [:parámetro | s1. s2. ... sn]
  • 66. POO - GIPSI - ¥ ¤ CICLOS to:do: Y to:by:do: EJEMPLOS |unArreglo| unArreglo — Array new: 10. 1 to: 10 do: [:j | unArreglo at: j put: 0.0]. 1 to: 10 by: 2 do: [:j | unArreglo at: j put: 3.0]. Se define una variable temporal llamada unArreglo a la que se le asigna un objeto arreglo de 10 elementos. Luego se inicializan todos sus elementos en 0.0. A continuación se inicializa con 3.0 las posiciones impares de dicho arreglo. Ejercicio 3: Crear un método en la clase entero que se denomine descendiendoHasta: enteroFinal hacer: unBloque que repita la evaluación de dicho bloque para cada entero que está entre el receptor del mensaje y enteroFinal decrementándose en 1.
  • 67. POO - GIPSI - ¥ ¥ 1 - UN EQUIVALENTE AL CICLO DE CANTIDAD DE REPETICIONES CONOCIDAS EN SMALLTALK 1. b - CICLO timesRepeat: Otro ciclo iterativo simple con un número específico de repeticiones se puede llevar a cabo usando el mensaje timesRepeat de la clase Integer. Este mensaje lleva como parámetro un bloque sin argumentos que se evaluará tantas veces como lo indique el entero receptor del mismo. Sintaxis: entero timesRepeat: [s1. s2. ... sn] EJEMPLO |suma| suma ˜ 0. 4 timesRepeat: [ suma˜ suma + 5 ].™ suma Obtener el producto de un número usando sólo suma: resolver 4 * 5 como la suma 4 veces de 5. |string| string : = ‘Esta es una cadena de caracteres’. (string size) timesRepeat: [...]. ... Notar que el objeto al que se le envía el mensaje es un entero, que puede ser el resultado del envío de otro mensaje. Si se quiere repetir algún bloque según la longitud de una string, se debe colocar (string size) en vez de un entero determinado. Los paréntesis no son necesarios, fueron colocados para lograr una mayor legibilidad.
  • 68. POO - GIPSI - ¥ ¦ 2 - UN EQUIVALENTE AL CICLO WHILE EN SMALLTALK Existen dos mensajes a objetos de la clase BlockContext que proveen un equivalente funcional de los ciclos while de otros lenguajes. Estos mensajes son whileTrue: y whileFalse:. Sintaxis: [bloqueDeTesteo] whileTrue: [bloqueEjecutable] (1) [bloqueDeTesteo] whileFalse: [bloqueEjecutable] (2) (1) Primero es evaluado el bloqueDeTesteo. Si es verdadero, entonces es ejecutado el bloqueEjecutable. Este proceso se repite hasta que el bloqueDeTesteo es evaluado como falso. Para (2) se sigue una lógica similar, pero inversa. Como se puede ver, éste es un ciclo que se repite de 0 a n veces. EJEMPLO “Contar las vocales de una string” |vocales string indice| vocales š 0. indice š 0. string š ‘String con varias vocales”. [indice = string size] whileTrue: [ (string at: indice) isVowel ifTrue: [vocales š vocales + 1]. indice š indice +1].› vocales
  • 69. POO - GIPSI - ¥ § CLASE BlockContext Notar que la implementación de los dos mensajes se hace en forma recursiva. whileTrue: unBloque “Evalúa el argumento unBloque mientras el receptor es verdadero.” œ self value ifTrue: [ unBloque value. self whileTrue: unBloque ] whileFalse: unBloque “Evalúa el argumento unBloque mientras el receptor es falso.” œ self value ifFalse: [ unBloque value. self whileFalse: unBloque ]
  • 70. POO - GIPSI - ¥ ¨ 3 - COLECCIONES: OTRA FORMA DE REPETICIÓN La clase Collection provee una variedad de esquemas de iteración. Todos los mensajes llevan como argumento un bloque con un parámetro que es evaluado una vez por cada elemento en el receptor (cada carácter de una string, cada elemento de un arreglo, etc.) Sintaxis: objetoColección mensaje: [ :parámetro | s1. s2. ... sn ] El mensaje puede ser alguno de los siguientes: ⇒⇒ do: se ejecuta el bloque argumento tantas veces como elementos aparezcan en la colección, asignando al parámetro un elemento de la lista en cada ejecución. ⇒⇒ collect: para cada uno de los elementos del receptor se evalúa el bloque con ese elemento como parámetro, y devuelve una nueva colección formada por el resultado de esas evaluaciones. ⇒⇒ select: crea y retorna una subcolección de los elementos del receptor, que verifican la expresión booleana final del bloque. Es decir que la expresión sn debe ser booleana.
  • 71. POO - GIPSI - ¦ © ⇒⇒ reject: crea y retorna una subcolección de los elementos del receptor que no verifiquen la expresión booleana final del bloque. Es decir que la expresión sn debe ser booleana. ⇒⇒ detect: devuelve el primer elemento de la lista que verifique la expresión booleana final del bloque. EJEMPLOS |string cuenta| cuenta  0. string  ‘Orientacion a Objetos’. string do: [:caracter | caracter isUppercase ifTrue: [ cuenta  cuenta + 1 ] ]. (1) string collect: [:caracter | caracter asUppercase ]. (2) string select: [:caracter | caracter isUppercase ]. (3) string reject: [:caracter | caracter isUppercase ]. (4) string detect: [:caracter | caracter isUppercase ]. (5) Los resultados de la evaluación de cada mensaje son los siguientes: (1) 2, que es la cantidad de caracteres en mayúsculas que hay en la string. (2) ‘ORIENTACION A OBJETOS’, que es la string convertida a mayúsculas. (3) ‘OO’, que es la subcadena que está en mayúsculas. (4) ‘rientacion a bjetos’, que es la subcadena que no está en mayúsculas. (5) $O, que es el primer elemento (carácter) que está con mayúsculas.
  • 72. POO - GIPSI - ¦   COLECCIONES: OTRA FORMA DE REPETICIÓN OTROS EJEMPLOS • Sumar los cinco primeros números primos |suma| suma ž 0. #(2 3 5 7 11) do: [:primo | suma ž suma + primo ]. Ÿ suma • Obtener el cuadrado de cada uno de los objetos enteros de un arreglo. #(1 3 4 9) collect: [:i squared ] el resultado es: #(1 9 16 81). • Extraer los objetos números impares de un arreglo. #(1 3 6 7) select: [:num | num odd ] el resultado es #(1 3 7). • Extraer los objetos números pares de un arreglo. #(1 3 6 7) reject: [:num | num odd ] el resultado es #(6). • Extraer el primer objeto número impar de un arreglo. #(1 3 6 7) detect: [:num | num odd ] el resultado es el objeto entero 1.
  • 73. POO - GIPSI - ¦ ¡ ANEXO: VARIABLES COMPARTIDAS DICCIONARIOS POOL (Pool Dictionaries): Son colecciones de variables (asociaciones nombre/valor) cuyo ámbito es un subconjunto definido de clases en el sistema. VARIABLES POOL Son variables compartidas por un subconjunto de clases en el sistema y son almacenadas en diccionarios Pool. No es necesario que exista una relación de herencia entre las clases que forman este subconjunto. Para que las variables pool se puedan acceder se debe declarar en la definición de la clase el nombre del diccionario Pool que las contienen. VARIABLES GLOBALES Son variables compartidas por todos los objetos. Existe un diccionario pool llamado Smalltalk que es accesible globalmente, es decir, es compartido por todas las clases y contiene todas las variables globales. Con el mensaje at:put: se agregan nuevas variables a los diccionarios pool. EJEMPLOS 1. Declaración de una variable (#NombreVariable) con un valor (valor) en un diccionario (Diccionario). Diccionario at: #NombreVariable put: valor. 2. Declaración de una variable (#NombreVariable) con un valor (valor) en el diccionario Smalltalk. Smalltalk at: #NombreVariable put: valor.