Sei sulla pagina 1di 33

UNAH

Ingeniera de Sistemas
Programacin orientada a
Objetos

Alumno: Rommell A. Caballero Pagoaga


Cuenta: 20031000386

COLECCIONES DE
SMALLTALK
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 puntero
a un objeto.

CLASES DE COLECCION ES SMALLTALK.


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 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:

OBJETO

OTRAS CLASES
COLECCION

ARRAY

BAG

SET

COMPORTAMIENTO.

COLECCION
ES
BAG
SET
ARRAY

INDE
DUPLI
XA
TAMAO VA CADOS
CION RIABLE
N
N
S

S
S
N

S
N
S

ORDEN CONTENIDOS

Cualquier ob
jeto pero no nil

Cualquier ob
jeto pero no nil

Cualquier
objeto

S= COMPORTAMIENTOS SOPORTADOS.
N= COMPORTAMIENTOS NO SOPORTADOS.

METODOS DE COLECCIONES
Cole
do
cciones

add remov
e

at at:pu Remove ,
t
Index

detect Se Re Co
lect ject llect

BAG

SET

ARRAY

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.

|xyuv|
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
permiten
elementos 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: 5
crea 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: 2


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

with:
with:
with:
with:

obj1
obj1 with: obj2
obj1 with: obj2 with: obj3
obj1 with: obj2 with: obj3 with obj4.

Acceso a elementos de una coleccin


Todas las subclases de Collection se
comportan de la misma manera. Por
ejemplo, la mayora proveen mecanismos
para adicin, remover y prueba.

Adicin
Cualquier 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.
^set
produce 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.
^set
produce 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.
^set
causa 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

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 -----------------la
posicion de los

intercambia

EJEMPLO DE SET:
|ABC|
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:

|ABC|
"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 size
retorna 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: unObjeto
unBag add: unObjeto withOcurrences: unEntero
(lo aade unEntero nmero de veces).
onsulta:
C
unBag includes: unObjeto (devuelve true si est el
elemento en la bolsa)
unBag ocurrencesOf: unObjeto (devuelve el
nmero de veces que aparece el elemento)
E
liminar 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.

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 su
contador asociado, por lo que se incrementar el
contador asociado al objeto si el elemento a
insertar 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.

Potrebbero piacerti anche