Coleccion de Smalltalk

Embed Size (px)

DESCRIPTION

colecciones en smalltalk - squeak

Citation preview

UNAHIngeniera de SistemasProgramacin orientada a Objetos

Alumno: Rommell A. Caballero Pagoaga

Cuenta: 20031000386

Las Colecciones son un importante conjunto de clases. Estas clases manejan grupos de objetos; es casi imposible escribir cdigo en Smalltalk sin utilizar una coleccin. Una coleccion es simplemente un conjunto de elementos donde cada elemento es un punteroa un objeto.

COLECCIONES DE SMALLTALK

CLASES DE COLECCION ES SMALLTALK.Se utiliza en tres clases de colecciones de smalltalk:- Array (Vector).- Bag (Bolsa).- Set (conjunto) .

En un Array (Vector o Arreglo) es una coleccin de tamao fijo que es indexable.

En una Bag (Bolsa) es una coleccin de tamao variable, que guarda objetos en un orden al azar y que no es indexable.

Un Set (Conjunto) es idntica a una Bolsa excepto en que no permite objetos duplicados.

El siguiente diagrama ilustra la jerarqua de clases de estas clases de colecciones:

OBJETOCOLECCIONOTRAS CLASESARRAYSETBAG

COMPORTAMIENTO.

COLECCIONES

INDEXACION

TAMAO VARIABLE

DUPLICADOS

ORDEN

CONTENIDOS

BAG

SET

ARRAY

N

N

S

S

S

N

S

N

S

N

N

N

Cualquier objeto pero no nil

Cualquier objeto pero no nil

Cualquier objeto

S= COMPORTAMIENTOS SOPORTADOS.

N= COMPORTAMIENTOS NO SOPORTADOS.

Colecciones

do

add

remove

at

at:put

RemoveIndex

,

detect

METODOS DE COLECCIONES

Select

Reject

Collect

BAG

SET

ARRAY

S

S

S

S

S

S

S

S

N

N

N

N

N

N

S

N

N

N

N

N

S

S

S

S

S

S

S

S

S

S

S

S

S

S= COMPORTAMIENTOS SOPORTADOS

N= COMPORTAMIENTOS NO SOPORTADOS

SUS FUNCIONES..ARRAY :

Dentro de las colecciones indexadas, las ms importantes son las de tamao fijo, y en particular los arrays y las cadenas. Un array se define como un coleccin de objetos en la que se insertan los elementos utilizando un ndice entero cuyo primer valor es 1.

Los arrays pueden crearse como literales o a partir de un mensaje new:-Crear un array: Array new: tamao, donde tamao > 0.

-Introducir elementos: unArray at: posicin put: elemento.

-Recuperar elementos: unArray at: posicin.

Sus sintaxis y mtodo que crea un array de 20 posiciones, lo inicializa al valor numrico de cada posicin y lo muestra:

|x i|x:=Array new: 20.i:=1.x size timesRepeat: [ x at: i put: i. i:=i+1].x do: [:i | Transcript show: i]

METODOS DESCRIPCION

Size -------------------- retorna el tamao del arreglo.

New: N -------------------- crea un arreglo con N elementos.

Capacity -------------------- retorna la maxima ca pacidad del arreglo.

IsNotEmpty ---------------- retorna TRUE si el arreglo

no esta vacio.Sorted --------------------- Ordena la coleccion de menor a mayor.

Metodos Descripcion

First ------------------------- retorna el primer elementos.

Last ------------------------ retorna el ultimo elementos.

At: N ----------------------- Retorna el elmento en la posicion N.

At: N put: M ------------- Cambia el elemento en la posicion N por M.

EJEMPLO DE ARRAY:

Invertir los numeros de un arreglo.

| x y u v |x:=#(1 2 3 4 5).y:=Array new: x size.v:=x size.U:=1.x size timesRepeat: [y at: u put: (x at: v).

u:=u+1.v:=v-1.].y.

EJEMPLO DE ARRAY #2 :

| xi j n t |

"Se convierte el arreglo (Array) a OrderedCollection porque el VisualWorks no permite que se modifiquen los arreglos, pero si se puede modificar una collecion ordenada."x:=#(8 6 1 2 0 6 2 3 4) asOrderedCollection.n:=x size.i:=1.n timesRepeat:[j:=i+1.(n-i) timesRepeat:

[(x at: j) < (x at: i) ifTrue: [t := x at: j.x at: j put: (x at: i).x at: i put: t.].j:=j+1.].i:=i+1.].x.

SET:

Clase que representa la nocin matemtica de conjunto. En estas colecciones no se permitenelementos duplicados. Para comprobar la pertenencia de un elemento al conjunto se utiliza el operador de igualdad =; si se quiere utilizar el de identidad (==), debe usarse una coleccin de tipo IdentitySet. Set no mantinene el orden de los elementos ni permite acceder a los mismos mediante ndices.

Set new: 5crea un Set de tamao 5 (inicialmente, todos los elementos son nil).

El mensaje new crea por defecto un Set de tamao dos; crecer en tamao cuando sea necesario. (Por defecto, la mayora de las otras colecciones tienen un tamao inicial de 10).

Las instancias inicializadas pueden ser creadas con los mensajes with:, with: with:, etc.

Set with: 40 with: 2crea un nuevo Set con los dos elementos 40 y 2. sta tcnica puede ser utilizada para especificar hasta cuatro argumentos:

Set with: obj1Set with: obj1 with: obj2Set with: obj1 with: obj2 with: obj3Set with: obj1 with: obj2 with: obj3 with obj4.

Acceso a elementos de una coleccinTodas las subclases de Collection se comportan de la misma manera. Por ejemplo, la mayora proveen mecanismos para adicin, remover y prueba.

AdicinCualquier objeto puede ser agregado a una coleccin utilizando el mensaje add:; su argumento es el objeto a ser agregado. Es importante notar que el argumento se regresa desde estos mensajes, no del receptor. Por ejemplo:| set |set:=Set new.set add:'a'.set add:5.^setproduce un Set conteniendo 'a' y 5.Cada vez que deseemos combinar dos colecciones, utilizaremos el mensaje addAll que provee esta funcionalidad, agregando los elementos del argumento al receptor. Esto es equivalente a set union. Por ejemplo:(Set with: 2 with: 3) addAll: (Set with: 4 with: 5)regresa un Set que contiene 2, 3, 4 y 5.

Para remover un objeto de una coleccin, enve a la coleccin el mensaje remove: -el argumento es el objeto que remover.La secuencia de los dos mensajes siguientes usa el mensaje remove: para ejemplificar la diferencia entre los mensajes add: y addAll:| set |set:= Set new.set add: 'a'.set add: 5.set addAll: (Set with:1 with:3 with:4).set remove:1.^setproduce un Set que contiene los elementos 'a', 3, 4 y 5, a diferencia de

| set |set:= Set new.set add: 'a'.set add: 5.set addAll: (Set with:1 with:3 with:4).set remove:1.^setcausa un error porque la variable temporal set refiere a Set conteniendo tres elementos -Set('a' 5 Set(1 3 4))- uno de los cuales es otro Set que contiene el elemento a ser removido. La variable temporal set no contiene 1.

Metodos Descripcion

Capacity --------------------------- retorna la maxima capacidad del Conjunto.

Size ------------------------- retorna el tamao del Conjunto.

At: N put: M -------------------- Cambia el elemento en la posicion N por M.

At: N ------------------------ Retorna el elmento en la posicion N.

-N --------------------------- Remueve del set actual todos los elementos el set N.

Includes: N -------------------- retorna TRUE si al elementos X se encuentra en la bolsa.

Metodos Descripcion

OcurrencesOf: X ------------------ Cuenta el nuevo de veces que el elementos X se encuentra en la bolsa.

ChangeCapacityTo: N ---------- Cambia la capacidad del set a N.

Swap: N with: M ------------------ intercambia la posicion de los elementos N y M del set.

EJEMPLO DE SET:

| A B C |A := #('HOLA' 'HORRIBLE' 'MUNDO' 'COMO' 'ESTAS?') asSet.B := #('HORRIBLE') asSet.C := A - B."El set C ahora contiene: HOLA MUNDO COMO ESTAS? sin la palabra HORRIBLE. "C.

EJEMPLO DE SET #2:

| A B C |"Realiza el producto cruz de dos conjuntos A y B, ambos deben tener numeros del 1 al 9, el resultado lo guarda en C."A := #(1 2 3) asSet.B := #(4 5 6) asSet.C := Set new.A do: [:a | B do: [:b |C add: a*10+b.].].C.

BAG:

Un objeto Bag, al igual que Set, es una coleccin desorganizada de elementos. La diferencia radica en que una instancia de Bag puede guardar el mismo objeto ms de una vez. Guarda los elementos en un Dictionary, contando las ocurrencias de objetos iguales. Debido a esta propiedad se cuenta con el mensaje add:with:Occurrences. Note que Bag sobreescribe la implementacin por defecto del mtodo add: para asegurar que una ocurrencia del objeto es agregada. Los siguientes ejemplos demuestran la diferencia entre las clases Bag y Set:

|bolsa|bolsa:= Bag new.bolsa addAll: (Set with: 1 with: 3 with: 4).bolsa addAll: (Set with: 1 with: 3 with: 4).^bolsa sizeretorna 6, a diferencia de que retorna 3.

Representa el concepto de bolsa: coleccin de objetos desordenada en la que puede haber ms de una misma ocurrencia de un mismo objeto. Bag lleva la cuenta de las veces que aparece cada uno de los elementos, para lo cual utiliza un contador asociado a cada objeto, pues internamente un Bag est implementado mediante un diccionario llamado contents.

Aadir un objeto:

unBag add: unObjetounBag add: unObjeto withOcurrences: unEntero (lo aade unEntero nmero de veces).

Consulta:

unBag includes: unObjeto (devuelve true si est el elemento en la bolsa)unBag ocurrencesOf: unObjeto (devuelve el nmero de veces que aparece el elemento)

Eliminar un objeto:

unBag remove: unObjeto ifAbsent: unBloque (borra una ocurrencia del elemento)unBag removeAllOccurrencesOf: anObject ifAbsent: unBloque (borra todas las ocurrencias)

Metodos Descripcion

Includes: N -------------------- retorna TRUE si al elementos X se encuentra en la bolsa.

OcurrencesOf: X ----------- Cuenta el nuevo de veces que el elementos X se encuentra en la bolsa.

Capacity -------------------------- retorna la maxima la capacidad de la bolsa.

Size ----------------------- retorna el tamao de la bolsa de los elementos.

IsNotEmpty ------------------- retorna TRUE si la bolsa

no esta vacio.Sorted ------------------------ Ordena la coleccion de menor a mayor.

EJEMPLO DE BAG:

|A B |

A := 'VisualWorks NonCommercial'.B := Bag new.

A do: [:c | B add: c].

B do: [:c | Transcript cr; show: 'La letra: ', c printString, ' aparece en la cadena ', (B occurrencesOf: c) printString, ' veces'].d

EJEMPLO DE BAG #2:

|x|x:=Bag new.x add: 34; add: 'dias'; add: $R; add: $R; add:34.x remove: 34 ifAbsent: [ ]; yourself.

Bag ($R "16r0052" $R "16r0052" 'dias' 34)

Bag utiliza el operador = para comprobar si un objeto est ya en la bolsa y as incrementar sucontador asociado, por lo que se incrementar el contador asociado al objeto si el elemento ainsertar es igual o idntico a otro que ya est en la bolsa.

Conclusin

Smalltalk supuso un revolucin 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 ms consistente en cuanto al manejo de las definiciones y propiedades del paradigma orientado a objetos.

Smalltalk es ms que un lenguaje, es un extenso programa de entorno de desarrollo con ms de doscientas clases y varios miles de mtodos.Hay muy poca informacin en espaol, 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.

???Page ??? (???)01/01/2002, 12:19:58Page /

???Page ??? (???)01/01/2002, 12:19:58Page /

???Page ??? (???)01/01/2002, 12:19:58Page /

???Page ??? (???)01/01/2002, 12:19:58Page /

???Page ??? (???)01/01/2002, 12:19:58Page /

???Page ??? (???)01/01/2002, 12:19:58Page /