Professional Documents
Culture Documents
Ingeniera de Sistemas
Programacin orientada a
Objetos
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.
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.
METODOS
DESCRIPCION
Size
no esta vacio.
Sorted --------------------- Ordena la coleccion de
menor a mayor.
Metodos
Descripcion
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.
with:
with:
with:
with:
obj1
obj1 with: obj2
obj1 with: obj2 with: obj3
obj1 with: obj2 with: obj3 with obj4.
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.
| 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
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.
|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
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
|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.