Entrar
¿Nuevo usuario? Inscribirme
smalltalking · Un lugar para el estudio y desarrollo de Ambientes de Objetos virtuales.
? ¿Ya estás suscrito? Entra a Yahoo!

Consejos

¿Sabías que...?
Podés hacer búsquedas de antiguos mensajes del grupo.

Mensajes

  Mensajes Ayuda
Avanzado
duda   Lista de mensajes  
Responder | Reenviar Mensaje #12490 de 17205 |
Re: [objetos] duda

Hola GallegO

> ¿Cómos seria una iteración robusta?
>

A mi entender sería una iteración donde uno pudiera escribir sin problemas
la expresión

clientes do: [:each | each estaOcupado ifTrue: [clientes remove: each]]

sin ni siquiera necesitar preguntarse si trae problemas o no.


En el libro de patterns (el de Gamma) en la pag. 261 dice

"How robust is the iterator? It can be dangerous to modify an aggregate
while you're traversing it. If elements are added or deleted from the
aggregate, you might end up accessing an element twice or missing it
completely. A simple solution is to copy the aggregate and traverse the
copy, but that's too expensive to do in general.

A robust iterator ensures that insertions and removals won't interfere with
traversal, and it does it without copying the aggregate."

Yo creo que el hecho de que sea poco performante hacer la copia no es el
único inconveniente.

También está el hecho de tener que estar atento para no meter la pata.
Fijate que yo metí la pata al proponer esa expresión de más arriba y al
toque recibí dos o tres mails de advirtiéndome del peligro de lo que estaba
por hacer. Eso significa que hay que tener parte de la atención de uno
puesta en cuidarse de eso, que si no fuera por lo poco robusta que es la
iteración sería la manera más simple y natural de escribir la solución.

Y ni que hablar si el remove estuviera oculto en un mensaje enviado desde el
interior del bloque que se está iterando. La no robustez del iterador obliga
a no poder derivar el texto del interior del bloque a métodos que puedan
ignorar tranquilamente que están siendo usados dentro de una iteración.
Porque sino volvemos a quedar expuestos al mismo peligro.

Ese me parece un problema feo: el de estar obligado a tener en cuenta el
tipo de uso que se le quiere dar al o que uno está escribiendo. Es contrario
al tipo de trabajo que uno pretende hacer con objetos: No escribir para un
uso particular o para un objetivo cerrado sino por el contrario dedicarse a
escribir comportamientos ignorando expresamente para qué serán utilizados.

Saludos
--
Juan/.

----- Original Message -----
From: "Sebastián Calvo" <scalvo@...>
To: <smalltalking@...>
Sent: Monday, October 04, 2004 9:27 AM
Subject: Re: [objetos] duda


>
> Juan:
>
> ¿Cómos seria una iteración robusta?
>
> Saludos
> GallegO
>
> At 19:59 01/10/2004, you wrote:
>
> >Gracias Sergio y Guillermo.
> >
> >Es cierto. Hice la prueba con una OrderedCollection en Dolphin, y lo que
se
> >puede decir es que las iteraciones no son robustas para tomar el término
que
> >figura en le libro de Gamma.
> >
> >Me mandé un ejemplo de testeo:
> >
> >oc3 := ((1 to: 9) collect: [:each|each * each]) asOrderedCollection.
> >
> >oc3 an OrderedCollection(1 4 9 16 25 36 49 64 81).
> >
> >oc3 do: [:each |each % 3 = 0 ifFalse: [oc3 remove: each]].
> >
> >Si la iteración que lleva a cabo el #do: fuera robusta debería responder
> >solamente con los cuadrados de los múltiplos de tres: 9 36 81 (tres
> >elementos).
> >
> >Pero da el error UndefinedObject does not understand #%.
> >
> >y la colección queda en un resultado erróneo a pesar de que el error se
da
> >recién después de haber procesado todos los elementos:
> >
> >oc3 printIt => an OrderedCollection(9 25 36 64 81)
> >
> >Este resultado puede entenderse viendo la implementación del #do: y del
> >#removeAtIndex:
> >
> >El remove va contrayendo la colección, y el #do: sigue iterando por los
> >índices previos a todo remove.
> >
> >En definitiva, no son iteraciones robustas y hay que tenerles cuidado.
> >
> >
> >
> >Saludos y gracias por el dato.
> >
> >Juan/.
> >
> >
> >
> >
> >
> >
> >----- Original Message -----
> >From: "Guillermo Sapaya" <gsapaya@...>
> >To: <smalltalking@...>
> >Sent: Friday, October 01, 2004 5:26 PM
> >Subject: Re: [objetos] duda
> >
> >
> > >
> > > Holasss,
> > >
> > > > Haciendo algo así (donde clientes es la colección de todos tus
clientes)
> > > >
> > > > clientes do: [:each | each estaOcupado ifTrue: [clientes remove:
> >each]].
> > > >
> > >
> > > OJO con esto, te va a traer muchos dolores de cabeza ;-)
> > > NO deberías modificar una colección al mismo momento en que la estás
> >recorriendo...
> > > Yo no creo que quieras "perder" los clientes de tu coleccion original,
> >seguramente lo que
> > > deseás es una copia de esa colección en la que estén solamente los que
> >están libres, si
> > > hacés esto o lo que dice Esteban, tené en cuenta, que luego, nunca mas
vas
> >a poder
> > > acceder a tus "clientes ocupados" en el objeto en donde los estabas
> >referenciando.
> > > Ahora me doy cuenta que el mail anterior me salió con respuesta solo a
> >Nair...
> > > En el decía que hagas algo así en el objeto que conoce tus clientes:
> > >
> > > clientesLibres
> > > "Devuelve una coleccion con los clientes que se encuentran libres."
> > >
> > > ^self clientes reject: [:each | each estaOcupado ]
> > >
> > > De esta manera, obtenés los clientes libres mediante este mensaje al
> >objeto que conoce los
> > > clientes y NO perdés los "clientes ocupados". Es decir, si luego en
otra
> >instancia necesitás
> > > los clientes ocupados, por ejemplo, podrías hacer algo así:
> > >
> > > clientesOcupados
> > > "Devuelve una coleccion con los clientes que se encuentran ocupados."
> > >
> > > ^self clientes select: [:each | each estaOcupado ]
> > >
> > > Y en la coleccion de clientes seguis teniendolos a todos
> > >
> > > Saludos, Guiye
> > >
> > >
> > >
> > >
> > > Para más información sobre la Asociación escribir a
info@...
> > >
> > > Smalltalking es un espacio colaborativo creado para el estudio y
> >desarrollo en Ambientes de Objetos.
> > > Se sustenta gracias a la participación de sus socios.
> > >
> > > Las reglas de etiqueta sobre la lista están en
> >http://www.smalltalking.net/join/netiquete.htm
> > >
> > > Enlaces de Yahoo! Grupos
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
> >Para más información sobre la Asociación escribir a info@...
> >
> >Smalltalking es un espacio colaborativo creado para el estudio y
> >desarrollo en Ambientes de Objetos.
> >Se sustenta gracias a la participación de sus socios.
> >
> >Las reglas de etiqueta sobre la lista están en
> >http://www.smalltalking.net/join/netiquete.htm
> >
> >Enlaces de Yahoo! Grupos
> >
> >
> >
> >
>
> Saludos
> José Sebastián Calvo
> scalvo@...
>
>
>
>
> Para más información sobre la Asociación escribir a info@...
>
> Smalltalking es un espacio colaborativo creado para el estudio y
desarrollo en Ambientes de Objetos.
> Se sustenta gracias a la participación de sus socios.
>
> Las reglas de etiqueta sobre la lista están en
http://www.smalltalking.net/join/netiquete.htm
>
> Enlaces de Yahoo! Grupos
>
>
>
>
>
>
>




Lun, 4 de Oct, 2004 7:09 pm

juanbuligovich
Sin conexión Sin conexión
Enviar correo Enviar correo

Reenviar Mensaje #12490 de 17205 |
Desplegar mensajes Autor Ordenar por fecha

Hola! Yo soy nueva en objetos asi que les pregunto esto: Tengo el método: come self estadoActual comer ¿cuál es el mensaje? El objeto sería self, pero no...
Nair
nair_19802003
Sin conexión Enviar correo
15 de Sep, 2004
4:21 pm

Nair, la egla es: "primero el objeto despues el mensaje" en tu ejemplo parece ser que a self, el objeto receptor (receiver), se le pide el estadoActual (con el...
Sebastian Sastre
ssastre@...
Enviar correo
15 de Sep, 2004
4:44 pm

Haciendo algo así (donde clientes es la colección de todos tus clientes) clientes do: [:each | each estaOcupado ifTrue: [clientes remove: each]]. ... ...
juanlb
juanbuligovich
Sin conexión Enviar correo
1 de Oct, 2004
7:32 pm

Holasss, ... OJO con esto, te va a traer muchos dolores de cabeza ;-) NO deberías modificar una colección al mismo momento en que la estás recorriendo... Yo...
Guillermo Sapaya
gsapaya
Sin conexión Enviar correo
1 de Oct, 2004
8:37 pm

Usá la segunda opción. Ya que en general, las colecciones no soportan ser modificadas mientras son recorridas. ... From: "juanlb" <juanlb@...> ...
Sergio Bruno Fedi de ...
sfedi
Sin conexión Enviar correo
1 de Oct, 2004
8:04 pm

Gracias Sergio y Guillermo. Es cierto. Hice la prueba con una OrderedCollection en Dolphin, y lo que se puede decir es que las iteraciones no son robustas para...
juanlb
juanbuligovich
Sin conexión Enviar correo
1 de Oct, 2004
10:59 pm

Juan: ¿Cómos seria una iteración robusta? Saludos GallegO ... Saludos José Sebastián Calvo scalvo@......
Sebastián Calvo
fxgallego
Sin conexión Enviar correo
4 de Oct, 2004
12:30 pm

Hola GallegO ... A mi entender sería una iteración donde uno pudiera escribir sin problemas la expresión clientes do: [:each | each estaOcupado ifTrue:...
juanlb
juanbuligovich
Sin conexión Enviar correo
4 de Oct, 2004
7:20 pm

Hola: Justamente te hice la pregunta porque nunca he tenido problemas de ese tipo. quizas se deba a la forma en que aprendi con Smalltalk, es decir, leyendo ...
Sebastián Calvo
fxgallego
Sin conexión Enviar correo
4 de Oct, 2004
9:52 pm

GallegO ... tipo. ... ¿Qué estaba tratando de hacer yo? Tratando de contestarle a Nair alguien la pregunta puntual que largó a la lista de cómo borrar de...
juanlb
juanbuligovich
Sin conexión Enviar correo
4 de Oct, 2004
10:11 pm

juanlb <juanlb@...> wrote:GallegO ... tipo. ... ¿Qué estaba tratando de hacer yo? Tratando de contestarle a Nair alguien la pregunta puntual que...
rosaura valbunea
aruasor352
Sin conexión Enviar correo
7 de Oct, 2004
12:56 am

Hola, Reflexionando sobre lo que comentaban sobre el tema, creo que no hay mucho mas que decir; concuerdo con lo que dicen de no protegerse frente a los...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
5 de Oct, 2004
12:20 am

Hola! Yo creo que "iteración robusta" es un termino raro, la robustez suena más aplicable a un animal o ser, no se porque se menciona en la literatura (ej ...
German Viscuso
gerpsai
Sin conexión Enviar correo
5 de Oct, 2004
2:35 pm

Hola Germán Cuando nos conocimos en Campana te dije que escribía poco en la lista, y que cada vez que escribía recibía palos. Pero, en fin. ¡A palos se...
juanlb
juanbuligovich
Sin conexión Enviar correo
5 de Oct, 2004
4:50 pm

Hola! ... Si si, todos recibimos palos, pero son con buena onda ehh. NO me gustaria que alguien se sintiera ofendido por eso. ... Pero fijate que hace...
Sebastián Calvo
fxgallego
Sin conexión Enviar correo
5 de Oct, 2004
6:00 pm

... que ... Si, a los palos estamos todos acostumbrados me parece. Igual no te queria palear ;-) ... más ... De acuerdo ... A veces ciertas ideas...
German Viscuso
gerpsai
Sin conexión Enviar correo
5 de Oct, 2004
6:24 pm

... que ... Si si claro, Gallego, lo que Ud diga, pero no se me enoje, plis.... ... Yo no diría lo mismo. Porque si así fuera, hubieran sido eliminados 6 ...
juanlb
juanbuligovich
Sin conexión Enviar correo
5 de Oct, 2004
6:45 pm

Germán ... No. Ya sé, por eso bromeaba con vos. ... se ... no ... las ... lo ... ¿Pero si te mienten y lo sabés, cómo hacés para confiar en ellos? ... ...
juanlb
juanbuligovich
Sin conexión Enviar correo
5 de Oct, 2004
7:18 pm

Hola Juan, ... La convivencia esta asegurada, por la pre-existencia del ambiente. Se puede vivir sabiendo que ninguno de lo enfoques es aplicable al 100%. El...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
6 de Oct, 2004
10:24 am

Hola Juan, ... solo ... el ... Entonces cumplió lo que dice el comentario! :-) Lo que dice el comentario se cumplió, el problema es que (el contenido de) la...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
6 de Oct, 2004
10:36 am

Hola Alejandro ... Sí, Entiendo que no es inmutable, y que la forma de su mutabilidad es la que causa el efecto de salteo del 25 y del 64 en el ejemplo. Lo...
juanlb
juanbuligovich
Sin conexión Enviar correo
7 de Oct, 2004
4:27 am

hola!!!!! Tengo la sig. duda: Tengo una colección con clientes que están ocupados en una fecha, ¿cómo podría eliminarlos de la colección general de...
Nair
nair_19802003
Sin conexión Enviar correo
1 de Oct, 2004
7:24 pm

... clientesGeneral removeAll: clientesOcupados De todos modos, algo de lo que planteas, me hace ruido en la cabeza. Podes contarnos un poco más al respecto...
Esteban A. Maringolo
emaringolo
Sin conexión Enviar correo
1 de Oct, 2004
7:40 pm

Hola lista ... Primero ,los clientes supongo tienen un colaborador llamemoslo estado entonces: "devuelve la coleccion de los clientes libres" Clientes...
Marcelo Diaz Cortez
mdc_marcelo
Sin conexión Enviar correo
1 de Oct, 2004
8:26 pm
Avanzado

Copyright © 2009 Yahoo! de Argentina S.R.L. Todos los derechos reservados.
Política de privacidad - Condiciones del Servicio - Reglas de la comunidad de Yahoo! - Ayuda