OO1 Clase Colecciones

Preview:

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