Upload
anitaaa
View
22
Download
0
Embed Size (px)
DESCRIPTION
objetos
Citation preview
Crear registro de movimientos
Orientación a Objetos I
Repaso
Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: depositar:
mov:Movimiento
new
Orientación a Objetos I
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.
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”)
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
Colecciones SmalltalkColecciones SmalltalkColecciones SmalltalkColecciones Smalltalk
Orientación a Objetos I
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:
¿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
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
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
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
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
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
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?
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
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.
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
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:
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]
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
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
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)
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)
#do:
#('hola' 'Laura' 'como estas?')
do: [:i | Transcript show: i ; cr ]
Orientación a Objetos I
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]
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)]
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].