Professional Documents
Culture Documents
mayo, 2005
SMALLTALK
Abstract
This document intends to be an introduction to a pure objectual language as it is Smalltalk,
paying special attention to the main aspects attached to object-oriented programming and
offering a set of basic notions for tose programmers who are aobut to face this interesting
language for the first tiem.
Tabla de contenidos
1. Introducción_____________________________________________________________ 1
2. Objetos y mensajes________________________________________________________ 1
2.2.1. Unario__________________________________________________________ 2
2.2.2. Binario_________________________________________________________ 2
3. Instrucciones_____________________________________________________________ 3
3.1. Asignaciones__________________________________________________________ 3
3.4. Variables_____________________________________________________________ 3
3.7. Bloques______________________________________________________________ 5
4.1. Nil___________________________________________________________________ 5
4.2. Bluques_______________________________________________________________ 6
5. Clases__________________________________________________________________ 6
7. Colecciones_____________________________________________________________ 12
7.1. Comportamientos______________________________________________________ 13
7.2. Métodos_____________________________________________________________ 14
8. Conclusión______________________________________________________________ 14
9. Bibliografía_____________________________________________________________ 15
1. Introducción.
Smalltalk, lenguaje de programación orientado a objetos integrados con un entorno de
desarrollo multiventana fue diseñado por Alan Kay (quien había diseñado y construido entre
1967 y 1968 la primera computadora personal basada en programación orientada a objetos,
llamada FLEX) y otros en XEROX PARC. Todo en Smalltalk es un objeto y toda la
computación es desarrollada mediante mensajes que son enviados entre los objetos.
Smalltalk es más que un lenguaje, es un extenso programa de entorno de desarrollo con más
de doscientas clases y varios miles de métodos. Smalltalk consta de un lenguaje, modelo de
objetos, un conjunto de clases reutilizables, conjunto de herramientas de desarrollo y un
entorno en tiempo de ejecución.
Muchos conceptos de Smalltalk como los browsers y las técnicas de browsing han
encontrado hoy su rumbo en muchas herramientas de desarrollo de la generación X,
desarrollado por Smalltalk poseen un factor “divertido-de-usar”. Los cambios se graban
instantáneamente y los mismos pueden probarse rápidamente.
La primera versión fue conocida como Smalltalk 72, cuyas raíces fueron Simula 67. Siguió
Smalltalk 76, una versión totalmente orientada a objetos. En 1980, Smalltalk 80, fue la primera
versión comercial del lenguaje, incluyendo un ambiente de programación orientado a objetos
uniforme. El lenguaje Smalltalk ha influido sobre otros lenguajes como C++ y Java, y aunque
no ha tenido el grado de éxito de estos dos últimos, quizás por lo tardío en volverse gratis junto
a razones de eficiencia, este lenguaje tiene un gran número de seguidores en la actualidad.
2. Objetos y mensajes
2.1.Dando nombre a objetos y mensajes.
Consideramos que todos los nombres de clases comienzan con una letra en mayúscula, como
por ejemplo "Alumno". Los nombres de mensajes comienzan con una letra en minúscula y
pueden tener cualquier combinación de letras y números sin espacios en blanco. Cuando el
nombre de un mensaje contiene más de una palabra, las palabras extras comienzan con una letra
en mayúscula. Un nombre válido de mensaje podría ser “unMensaje” .Procurando siempre
utilizar nombres cortos para su mejor facilidad de utilización.
2.2.1. Unario:
Es el tipo de mensaje que más prioridad tiene. Consiste de un nombre de mensaje y un
operando. Los objetos se colocan antes del nombre del mensaje.
Ej: 'hola' outputToPrinter "Envía la cadena 'hola' a la impresora"
2.2.2. Binarios:
Un mensaje binario puede ser de uno o dos caracteres de longitud. Estos son utilizados para
especificar operaciones aritméticas, lógicas y de comparación con cualquiera de los siguientes
caracteres especiales:
+/\*~<>=@%|&?!,
Ej:
UnObjeto unMensaje: parametro
3. Instrucciones
Las instrucciones en Smalltalk son las que forman los códigos ejecutables, las cuales a su vez
están formadas por expresiones.
Las expresiones son de tres tipo:
Un nombre de variable Cada instrucción separada por un punto
Un literal Cada instrucción separada por un punto
Un envío de mensajes
3.1.Asignaciones
En Smalltalk, una variable apunta a un objeto en vez de guardarlo. Se dice que una variable
contiene al identificador del objeto.
Una asignación recoge el objeto al cual apunta la variable y le cambia su valor.
La sintaxis para una instrucción de asignación es:
variable := instrucción
Ej:
x : = 1024
3.3.Comentarios en el código
Un comentario en código en Smalltalk se representa entre comillas dobles.
Ej: “Esto es un comentario”
3.4.Variables
El nombre de una variable temporal comienza con una letra en minúscula, y debe ser único
dentro del método, por lo que no se podrá duplicar el nombre de una variable temporal de una
interfase. Las variables temporales están definidas en la definición de interfase de un método.
Por ejemplo, en la instrucción: artículo: unCodigo
Un método puede tener más variables temporales, listándolas entre barras verticales |
llamadas tuberías.
unMetodo: variableTemporal
"Esto es un ejemplo de un método."
| nuevoValor |
nuevoValor := 4 * 8.
^nuevoValor
Métodos adicionales pueden ser creados a partir de estos determinar y obtener para combinar
sus capacidades:
nombre:direccion: "Determina nombre y dirección en un mensaje"
nombre:direccion:telefono: "Determina nombre, dirección y teléfono"
Los métodos para obtener y determinar proveen a los usuarios, una interfase común y estable
con los atributos (variables) de la clase. Como la implementación de estos métodos está oculta a
los usuarios, cualquier cambio a su procesamiento interno no implica ningún problema,
mientras la interfase permanezca igual.
3.7.Bloques:
Permite que el código sea pasado como argumento en un mensaje y ejecutado posteriormente en
otro método. Hay tres tipos de bloques. Un bloque cero-argumento que no acepta argumentos
cuando se ejecuta. Un bloque de un-argumento que acepta sólo un argumento cuando se ejecuta.
Un bloque de dos-argumentos que acepta dos argumentos cuando se ejecuta.
La sintaxis del bloque consiste en corchete que contienen a 0 ó más expresiones y un código
que realiza iteraciones o ejecuciones condicionales.
3.8.Instrucciones en cascada
Si varias instrucciones envían mensajes al mismo objeto, pueden ser colocadas como
instrucciones en cascada. Las instrucciones en cascada terminan con un punto y coma (;),
exceptuando a la última instrucción que termina con un punto (el punto es opcional si la
secuencia de instrucciones en cascada son la última instrucción del método en donde se
encuentran).
Self es el receptor de los mensajes para todas las instrucciones del método. Para ejecutar los
mensajes correctamente, necesitan aparecer en instrucciones separadas.
4.1.NIL
Nil es para Smalltalk lo que null ó 0 para C. Es un objecto que significa "nada". Según se
declara una variable estar tendrá inicialmente el valor nil, aunque tambien se puede conseguir
durante el desarrollo del programa.
Por ejemplo:
Telefono := nil.
Nil también se puede usar como valor devuelto de una función, en este caso, indicaría que la
operación no fue exitosa. Por ejemplo, la siguiente lógica devuelve nil si un argumento es no
positivo, caso contrario devuelve el resultado de la operación artimética:
4.2.Bucles
Hay cuatro tipo de iteraciones: hacer algo n número de veces, hacer algo hasta que se encuentre
con una condición false, hacer algo hasta que se encuentre con una condición true, hacer algo
usando un índice, comenzando con un valor inicial, y finalizando en un valor final.
Los cuatro mensajes de palabra clave que proveen estas funciones son: timesRepeat:,
whileTrue:, whileFalse:, y to:do:.
5. Clases
Existen muchos objetos en el Entorno Smalltalk y estos que responden a los mismos mensajes
con el mismo comportamiento son agrupados. Cuando están agrupados, su memoria privada es
representada de la misma forma, y sus métodos referencian sus datos con el mismo conjunto de
nombres. A un grupo de objetos, con las características así definidas, se le llama clase. Los
objetos pertenecientes a un grupo son llamados instancias de la clase. Programar en el Entorno
Smalltalk consiste en crear nuevas clases, crear instancias de clases, y especificar una secuencia
de intercambios de mensajes a través de todos estos objetos.
5.3.Variables de clase
Una variable de clase apunta al estado de la clase que la define. Sólo existe una copia de la
variable de clase en la jerarquía local de clases, convirtiéndola en una variable compartida. La
clase que define esta variable, y todas sus subclases, se referencian a esta única copia de la
variable.
Tanto las variables de clase como las variables de instancia de clase son importantes al
desarrollar aplicaciones complejas en Smalltalk. Las variables de clase permiten compartir
información a través de todas las subclases. Las variables de instancia de clase permiten heredar
el comportamiento de la clase a las subclases, mientras posibilita que cada subclase maneje su
propio estado de la variable; éstas son como las variables de clase, excepto que cada subclase
tiene su propia copia. Dado que es una variable privada, las variables de instancia de clase
deben comenzar con minúscula. Las variables de instancia de clase soportan el comportamiento
de herencia de clase, teniendo cada clase su propio estado de la variable.
En este ejemplo se usarán las clases Cliente, Vendedor y Persona. Suponga que se desea
obtener tres listas separadas de Cliente, Vendedor, y Persona en vez de una. ¿Cómo se realiza?
Una forma es agregar variables de clase para cada una de estas tres clase, y definir métodos de
clase duplicados para tratar cada lista. Otra forma de obtener estas listas, es definir las variables
como variables de instancia de clase, en vez de definirlas como variables de clase.
Las variables de instancia de clase, son variables de instancia que definen el estado de la
clase, en vez del estado de una instancia de la clase.
Se cambiará la variable Personas de una variable de clase, a una variable de instancia de
clase. Ahora su nombre será personas. Para acceder a la información que posee personas desde
métodos de instancia, se deberá enviar un mensaje a la clase.
Personas
"Devuelve el contenido de personas (variable de instancia
de clase) y se asegura que la variable esté inicializada."
6.1.Herencia de Métodos
Para que una clase pueda modificar su comportamiento respecto a su superclase, tenemos a la
Herencia de Métodos, bien mediante el agregado de nuevo métodos o bien redefiniendo los ya
existentes heredados. Smalltalk también permite que las instancias de una subclase hereden los
métodos de su superclase y de más altas superclases en la jerarquía.
6.2.Herencia de Variables
La principal ventaja de la herencia es la posibilidad de que una clase herede las variables de la
superclase, a las cuales, las subclases también pueden poseer sus propias variables. Las
variables de clase e instancia se agregan a la clase colocándolas en la definición de clase. Las
clases heredan de manera diferente las variables de instancia y las variables de clase.
6.3.Clases abstractas
Las clases abstractas proveen de un comportamiento a sus subclases, pero nunca tendrán sus
propias instancias. Hay dos tipos de métodos que las clases abstractas proveen. El primer tipo,
brinda un método completo para que una subclase lo herede; el segundo, brinda una "interfaz"
del método que es común a todas las subclases pero que no posee código. La siguiente figura
muestra las clases abstractas de un supuesto árbol de jerarquías de Smalltalk.
7.Colecciones
Las Colecciones son un importante conjunto de clases. Estas clases manejan grupos de
objetos; es casi imposible escribir código en Smalltalk sin utilizar una colección. Una
colección es simplemente un conjunto de elementos donde cada elemento es un puntero
a un objeto.
Smalltalk posee un número de diferentes tipos de colecciones incluyendo: Bag (Bolsa),
Set (Conjunto), Array (Vector), OrderedCollection (Colección Organizada),
SortedCollection (Colección Ordenada), String (Cadena), Symbol (Símbolo), y
Dictionary (Diccionario).
COMPORTAMIENTOS
Tamaño
COLECCIONES Indexación Duplicados Orden Contenidos
variable
String S N S N Caracteres
Symbol S N N N Caracteres
Clave + Cualquier
Dictionary N S N N
objeto
MÉTODOS
COLECCIONES do: add: remove: at: at:put: removeIndex: , detect: select: reject: collect:
Bag S S S N N N N S S S S
Set S S S N N N N S S S S
Array S N N S S N S S S S S
OrderedCollection S S S S S S S S S S S
SortedCollection S S S S N S S S S S S
Dictionary S S N S S N N S S S S
String S N N N S N S S S S S
Symbol S N N N S N S S S S S
8.Conclusión
Smalltalk supuso un revolución debido al ser el primer lenguaje orientada a objetos. Smalltalk
es un modelo puro orientado a objetos lo que significa que todo, en el entorno, es tratado como
un objeto. Entre todos los lenguajes orientados a objetos, el que nos concierne es el más
consistente en cuanto al manejo de las definiciones y propiedades del paradigma
orientado a objetos.
Smalltalk es más que un lenguaje, es un extenso programa de entorno de desarrollo
con más de doscientas clases y varios miles de métodos.
Hay muy poca información en español, lo que nos indica y así es, que no tiene mucha acogida
en Europa, no así en Estados Unidos; aunque en Extremadura hay comunidad que le dan vida a
este robusto y antiguo lenguaje.
9.Bibliografía
• Descarga del programa Squeak 3.7 para distintos Unix, Windows ( 98/95, NT, XP y CE ),
Macintosh, Acorn RISC OS e incluso PDA
http://www.squeak.org/download/
VisualAge enfatiza sobre las construcciones visuales de interfaces y aplicaciones, contienen dos
niveles de soporte de desarrollo: grupal e individual. Ambos corren en diferentes plataformas,
incluyendo: IBM OS/2, Microsoft Windows, and AIX.
Se trata de un programa de pago, pero para este trabajo se ha utilizado una versión de
evaluación de 30 días.
En primer lugar descomprimimos el zip “va602_cw” donde se encuentra el cliente del
programa, dando una carpeta llamada “cd_c”, en la cual se encuentra otra carpeta llamada
“install_w” , hacemos doble clic en ejecutándose ya el asistente de instalación.
De forma similar se instala la parte del servidor del programa, donde se encuentran las
bibliotecas necesarias para el programa.
Una vez hecho todo esto, ya podemos ir a ejecutar el programa.
Pantalla inicial: