27
Crear registro de movimientos Orientación a Objetos I Repaso

OO1 Clase Colecciones

  • Upload
    anitaaa

  • View
    22

  • Download
    0

Embed Size (px)

DESCRIPTION

objetos

Citation preview

Page 1: OO1 Clase Colecciones

Crear registro de movimientos

Orientación a Objetos I

Repaso

Page 2: OO1 Clase Colecciones

Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: Diagrama Secuencia: depositar:

mov:Movimiento

new

Orientación a Objetos I

Page 3: OO1 Clase Colecciones

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

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

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

Colecciones SmalltalkColecciones SmalltalkColecciones SmalltalkColecciones Smalltalk

Orientación a Objetos I

Page 7: OO1 Clase Colecciones

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

¿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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#do:

#('hola' 'Laura' 'como estas?')

do: [:i | Transcript show: i ; cr ]

Orientación a Objetos I

Page 25: OO1 Clase Colecciones

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

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

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].