oo1 clase colecciones
DESCRIPTION
objetosTRANSCRIPT
![Page 1: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/1.jpg)
Crear registro de movimientos
Orientación a Objetos I
Repaso
![Page 2: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/2.jpg)
Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: depositar:
mov:Movimiento
new
Orientación a Objetos I
![Page 3: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/3.jpg)
registar el Movimientoregistar el Movimientoregistar el Movimientoregistar el Movimiento
Orientación a Objetos I
CuentaBancaria>>depositar: unMonto
self incrementarSaldo: unMonto.
|mov|
mov := Movimiento new inicializar:Date today monto:unMonto tipo:”depositar”
registroDeMovimientos add: mov.
![Page 4: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/4.jpg)
Un buen programador Smalltalk ….Un buen programador Smalltalk ….Un buen programador Smalltalk ….Un buen programador Smalltalk ….
CuentaBancaria>>depositar: unMonto
self incrementarSaldo: unMonto.
registroDeMovimientos add: (Movimiento new inicializar:Date today
monto:unMonto
tipo:”depositar”)
• Evitaría la variable temporal
Orientación a Objetos I
tipo:”depositar”)
![Page 5: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/5.jpg)
Qué es el registro de movimientos ???Qué es el registro de movimientos ???Qué es el registro de movimientos ???Qué es el registro de movimientos ???
Orientación a Objetos I
![Page 6: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/6.jpg)
Colecciones SmalltalkColecciones SmalltalkColecciones SmalltalkColecciones Smalltalk
Orientación a Objetos I
![Page 7: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/7.jpg)
ContenidoContenidoContenidoContenido
• ¿Qué es una colección SmallTalk?
• Propiedades de las colecciones– Comportamiento de una colección
– Heterogeneidad
• Ejemplos de uso
• Jerarquía de Collection
Orientación a Objetos I
• Jerarquía de Collection • Bag y Set
• Array
• OrderedCollection
– SorteredCollection
• Dictionary
• Iteradores - recorriendo colecciones• do:
• select:, detect:, collect:, reject:
![Page 8: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/8.jpg)
¿Qué es una colección ST?¿Qué es una colección ST?¿Qué es una colección ST?¿Qué es una colección ST?
• Es un objeto que “contiene” un grupo de
otros objetos
• Los objetos contenidos se llaman “elementos”
de la colección
Orientación a Objetos I
unLlavero
unPañuelo
unaBilletera
aPenDriveunLibro
unaLapicera
miBolso
![Page 9: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/9.jpg)
Comportamiento básicoComportamiento básicoComportamiento básicoComportamiento básico
• Clase Collection
• Responsabilidades:
– Contener los elementos
•Testear y consultar la colección y su contenido– miBolso size
Orientación a Objetos I
– miBolso size
– miBolso includes: unLibro
– miBolso isEmpty
•Permitir agregar y eliminar elementos– miBolso add: otroLibro
– miBolso remove: unaLapicera
![Page 10: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/10.jpg)
HeterogeneidadHeterogeneidadHeterogeneidadHeterogeneidad
• Una colección puede contener objetos de cualquier
clase
• No se declara de que clase son sus elementos • ST es no tipado
Orientación a Objetos I
• col ���� Collection
• col add: anObject
• ejemplo miBolso es heterogeneo
• Excepciones: String, que es una colección de Characters
![Page 11: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/11.jpg)
Ejemplos de UsoEjemplos de UsoEjemplos de UsoEjemplos de Uso
atún
dentífricoJugo
nara
nja
azúcar
ticket de compras
c1 c2 c3 c4 c5 c6atender llegar
primer cliente último cliente
Clientes en la cola de una caja(colaClientes)
Agregar productos
Orientación a Objetos I
cajero
A
azúcar – 3
dentífrico – 3,40
atun – 5.60
jugoNaranja –2,70
Asignación de cajeros(cajasSupermercado) Lista de Precios
(listaPrecios)
cajero
B
nil cajero
D
Calcular el total
Cambiar el cajero de
una caja en particular Conocer el precio de
un producto
1 32 4
![Page 12: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/12.jpg)
Jerarquía de la clase CollectionJerarquía de la clase CollectionJerarquía de la clase CollectionJerarquía de la clase Collection
Object
Collection
Bag
SequenceableCollection
ArrayedCollection
Array
CharacterArray
Orientación a Objetos I
CharacterArray
String
Symbol
OrderedCollection
SortedCollection
Set
Dictionary
![Page 13: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/13.jpg)
Instanciación de coleccionesInstanciación de coleccionesInstanciación de coleccionesInstanciación de colecciones
myColl := OrderedCollection new.
myColl := Array new: 30.
myColl := Set with:´red´with:´blue´
Orientación a Objetos I
with:´blue´with:´yellow´.
• Luego, a través del add: algunas pueden crecer
![Page 14: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/14.jpg)
Eligiendo el tipo de una colección?Eligiendo el tipo de una colección?Eligiendo el tipo de una colección?Eligiendo el tipo de una colección?
• ¿se necesita tener los elementos ordenados?
• ¿en caso afirmativo, cómo se determina el
orden?
• ¿los elementos necesitan ser accedidos por una
clave?
Orientación a Objetos I
clave? • ¿cómo es la clave?
• ¿habrá elementos repetidos?
![Page 15: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/15.jpg)
BagBagBagBag
• Es una colección desordenada y sin acceso por clave de elementos
• No secuenciable
• Permite elemento repetidos
Orientación a Objetos I
lata
atún
dentífrico
jugo
Nara
nja
azúcar
shoppingCart add: ´jugoNaranja´
shoppingCart occurencesOf:´jugoNaranja´ � 6
shoppingCart:= Bag new.
shoppingCart add: ….
5
4 1
2
6
shoppingCart occurencesOf:´jugoNaranja´ � 5
![Page 16: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/16.jpg)
SetSetSetSet
• Es como el Bag, pero sin elementos repetidos
Orientación a Objetos I
1
2
3
mySet add: 3
mySet occurencesOf: 3 � 1
mySet:= Set new add:3; add:2; add:1.
![Page 17: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/17.jpg)
ArrayArrayArrayArray
• Es una secuencia de elementos accesibles por
un índice entero
cajero cajero nil cajero
1 32 4
Orientación a Objetos I
cajero
A
cajero
B
nil cajero
D
cajasSupermercado at: 2 � cajeroB
cajasSupermercado at: 3 put: cajeroX
cajero
A
cajero
B
cajero
X
cajero
D
El add: esta
cancelado
![Page 18: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/18.jpg)
OrderedCollectionOrderedCollectionOrderedCollectionOrderedCollection
• Define una secuencia de elementos ordenados
• todo elemento tiene su anterior o siguiente,
excepto los extremos
Orientación a Objetos I
c1 c2 c3 c4 c5 c6
primer cliente
último cliente
“llega un cliente”
colaClientes addlast: unCliente
“atender”
colaClientes removefirst
Otros métodos:addFirst:, add: after:, first,
after:, before:
![Page 19: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/19.jpg)
SorteredCollectionSorteredCollectionSorteredCollectionSorteredCollection
• Es una OrderedCollection, pero
• los elementos están ordenados por alguna
característica de los elementos
Orientación a Objetos I
listaNumeros add: 181 5 8 15 23 56 1 5 8 15 18 23 56
listaNumeros:=SortedCollection sortBlock: [:nro1 :nro2| nro1 < nro2]
![Page 20: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/20.jpg)
DictionaryDictionaryDictionaryDictionary
• Son como los arrays pero el índice es un
objeto cualquiera
• Es un conjunto de pares:
key value
Orientación a Objetos I
Clave bajo la cual se
guarda el objetoObjeto guardado
listaPrecios at:´jugoNaranja´ � 2,70
listaPrecios at:´jugoNaranja´ put:2,65
azúcar – 3
dentífrico – 3,40
atun – 5.60
jugoNaranja –2,70
key value
![Page 21: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/21.jpg)
IteradoresIteradoresIteradoresIteradores
• Las colecciones también son responsables de
recorrerse a sí mismas
• Existen mensajes, llamados iteradores, que
evalúan un bloque por cada elemento
Orientación a Objetos I
evalúan un bloque por cada elemento
• El más conocido es el do:
– col do: aBlock
![Page 22: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/22.jpg)
EjemplosEjemplosEjemplosEjemplos
#(2 -3 4 -35 4) collect: [:each| each abs]
> #(2 3 4 35 4)
Orientación a Objetos I
#(15 10 19 68) collect: [:i | i odd ]
> #(true false true false)
![Page 23: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/23.jpg)
Pero podriamos hacerlo asi:Pero podriamos hacerlo asi:Pero podriamos hacerlo asi:Pero podriamos hacerlo asi:
#(15 10 19 68) collect: [:i | i odd ]
|result aCol|
aCol := #( 2 -3 4 -35 4).
result := aCol species new: aCol size.
1 to: aCollection size do:
Orientación a Objetos I
[:each | result at:each put:(aCol at:each) odd].
Luego,
result -> #(true false true false)
![Page 24: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/24.jpg)
#do:
#('hola' 'Laura' 'como estas?')
do: [:i | Transcript show: i ; cr ]
Orientación a Objetos I
![Page 25: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/25.jpg)
do:
col do: aBlock
para cada elemento perteneciente a la
colección
Orientación a Objetos I
aBlock value: elemento
Por ejemplo: aumentar el precio de los
elementos de la lista de precios
listaPrecios do: [:prod| prod price: prod price*0,001]
![Page 26: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/26.jpg)
Como esta implementado elComo esta implementado elComo esta implementado elComo esta implementado el #do:
SequenceableCollection>>do: aBlock
"Evaluate aBlock with each of the receiver's
elements as theargument."
Orientación a Objetos I
1 to: self size do:
[:i | aBlock value: (self at: i)]
![Page 27: OO1 Clase Colecciones](https://reader034.vdocuments.pub/reader034/viewer/2022050809/55cf9202550346f57b92ac37/html5/thumbnails/27.jpg)
Más iteradoresMás iteradoresMás iteradoresMás iteradores
• #(1 5 2 89 34 53) select: [:element| element > 28]– > #(89 34 53)
• #(1 5 2 89 34 53) reject: [:element| element > 28]– > #(1 5 2 )
• #(1 5 2 89 34 53) collect: [:element| element > 28]– > #(false false false true true true)
• #(1 5 2 89 34 53) detect: [:element| element > 28]• > 89
Orientación a Objetos I
• > 89
• #(1 5 2 89 34 53) detect: [:element| (element rem: 3)=0]ifNone: [Dialog warn: 'No such element']
• #(1 5 2 89 34 53) inject:0
into:[:subTotal :element | subTotal+ element].