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
Estilo de programacion   Lista de mensajes  
Responder | Reenviar Mensaje #15152 de 17205 |
Re: [objetos] Estilo de programacion



On 9/29/06, kikote gregoris <kikogregoris@...> wrote:
Hola Ale y Esteban
 
Entiendo.
 
Ahora se supone que la inicialización perezosa debería ser utilizada en los casos que  plantea Esteba, donde los recursos no son siempre necesarios e inmediatos.
 
Lo curioso que en lo que yo pegue como ejemplo el recurso es totalmente necesario.
 
Cual es el costo de tener que preguntar si el objeto es nil o no para inicializarlo??.
En términos de performance claro.

Supongo que es despreciable no?. Es una constante mas(por lo menos viendolo desde alto nivel) no?
 
Lo digo pensando en que esto se generalice a gran parte del sistema, o es insignificante ??
 
Por lo del #new me referia a cuando usar una u otra alternativa.
Se supone que si redefino el #new es para hacer un #initialize  o no ?


Yo muchas veces redefino el new para decir que no deberia estar implementado. ¿Cuando lo hago?. Supongamos que tengo una clase persona y asumamos que una persona sin nombre ni apellido no tiene sentido de existir. Entonces a la hora de implementar hare:

Persona>>new


            ^self sentNotImplemented

Persona>>name: aName surname: aSurname


        ^(super new)
            initialize: aName
            surname: aSurname.
 
Aunque si queres podrias creartela con un basicNew pero no es el sentido a nivel de aplicacion hacerlo. Algunas otras opciones? Me interesan mucho sus experiencias...


Desgraciadamente en la facultad solo vimos una de las alternativas
 
 
saludos kiko

"Alejandro F. Reimondo" < aleReimondo@...> escribió:
Hola kiko,

Hay (al menos) dos tipos de inicialización.
1.- mediante new/initialize
2.- lo que viste, que se llama inicialización diferida,
     bajo demanda o lazzy

Son mecanismos NO equivalentes.
Cuando y porque se usa uno u otro es un tema de
las materias básicas de objetos hoy, en día.
En esta lista hemos hablado mucho del tema,
seguramente esta en los mails históricos
bastante material sobre esto.

Sobre el #release no se ha definido tan
formalmente como hacerlo en la comunidad aún;
a menudo yo prefiero la modalidad que resaltas.

>   Quería saber a que se debe esta forma de trabajar,

A hacerlo así por años (no se si hay mas o
menos de cien razones).
Quienes trabajaron conmigo usan algunas de estas
modalidades, no todos... son cosas que se adquieren
y se pierden rápidamente; al entrar/salir de un equipo.

> tiene que ver con el concepto de no generar basura.

No. Tiene que ver con un gestual, una forma de realizar una actividad.
No es necesario buscar el no generar basura.
Es tan innecesario como el economizar clases...

>   En muy pocos casos observe que redefinieras
> el #new y colocaras un #initialize.

Si, son muy pocos los casos dónde es necesario
hacerlo de esa manera.
Por lo general quien empieza usa ese mecanismo
casi siempre y lo hace así por años si no se
encuentra con un equipo que trabaje distinto;
fijate que dije "un equipo"... no "una persona"
(considero que son modismos que se transmiten por
un proceso educativo).

>   Es siempre conveniente trabajar de esta forma?.

Es siempre conveniente usar el mecanismo
apropiado para la situación.
Si no sabes reconocer mas de una situación (reconoces
solo "inicialización"/construcción) entonces es
siempre conveniente usar lo mismo :-)

>   Cuando es necesario redefinir un #new ¿?

En el mismo caso que necesitas refinar cualquier mensaje.
El #new es un mensaje mas.

hasta pronto,
Ale.

----- Original Message -----
From: "kikote gregoris" < kikogregoris@...>
To: < smalltalking@...>
Sent: Friday, September 29, 2006 11:26 AM
Subject: [objetos] Estilo de programacion


> Hola Ale
>
>   Estuve viendo que en muchas oportunidades, cuando necesitas retornar el
colaborador de un objeto haces lo siguiente:
>
>   engine
>               "Returns the instance var of the receiver
>                for external manipulation"
>
>               engine isNil ifTrue: [ self initializeEngine ].
>               ^engine
>
>   En la universidad  se nos enseño que cuando uno tiene que inicializar un
objeto, lo que hace es redefinir el #new y hacer un # initialize,  donde se
coloca todo lo que quiero inicializar del objeto, en tu caso inicializas el
objeto a medida que lo necesitas.
>   Esto además se ve mucho en el código C++  con el #constructor y el
#destructor.
>   Luego para setear un objeto haces:
>
>   engine: anEngine
>               "Sets the instance var of the receiver.
>               Release the old instance if needed."
>
>               engine notNil ifTrue: [ engine release ].
>               engine := anEngine
>
>   Luego para liberar los recursos de el objeto haces:
>
>   release
>               " Private - Release the receiver. "
>
>
>               self
>                           engine: nil;
>                           yourself.
>
>               super release
>
>   Lo cual en el release tradicional simplemente harías un release del
engine y no mandarle nil .
>
>   Quería saber a que se debe esta forma de trabajar, tiene que ver con el
concepto de no generar basura.
>   En muy pocos casos observe que redefinieras el #new y colocaras un
#initialize.
>
>   Es siempre conveniente trabajar de esta forma?.
>   Cuando es necesario redefinir un #new ¿?
>
>   saludos kiko
>
>
> ---------------------------------
>  Preguntá. Respondé. Descubrí.
>  Todo lo que querías saber, y lo que ni imaginabas,
>  está en Yahoo! Respuestas (Beta).
>  Probalo ya!



Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
Probalo ya!




--
Saludos
Esteban

Sáb, 30 de Sep, 2006 11:13 am

esteban_mate
Sin conexión Sin conexión
Enviar correo Enviar correo

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

Hola Ale Estuve viendo que en muchas oportunidades, cuando necesitas retornar el colaborador de un objeto haces lo siguiente: engine "Returns the instance var...
kikote gregoris
kikogregoris
Sin conexión Enviar correo
29 de Sep, 2006
2:32 pm

Kiko, Por lo poco que se, eso se llama lazy initialization. Lo correcto, me parece, es que la instanciacion de un objeto te lo deje en un estado consistente....
Esteban Robles Luna
esteban_mate
Sin conexión Enviar correo
29 de Sep, 2006
6:30 pm

Hola kiko, Hay (al menos) dos tipos de inicialización. 1.- mediante new/initialize 2.- lo que viste, que se llama inicialización diferida, bajo demanda o...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
29 de Sep, 2006
11:34 pm

Hola Ale y Esteban Entiendo. Ahora se supone que la inicialización perezosa debería ser utilizada en los casos que plantea Esteba, donde los recursos no son...
kikote gregoris
kikogregoris
Sin conexión Enviar correo
30 de Sep, 2006
1:51 am

... Supongo que es despreciable no?. Es una constante mas(por lo menos viendolo desde alto nivel) no? ... Yo muchas veces redefino el new para decir que no...
Esteban Robles Luna
esteban_mate
Sin conexión Enviar correo
1 de Oct, 2006
12:14 pm

Hola Kiko ... En términos de performance claro. ... Yo supongo que debe ser absolutamente insignificante. Probando en Dolphin 6 el tiempo de evaluación de la...
Juan
juanbuligovich
Sin conexión Enviar correo
1 de Oct, 2006
2:01 am

Hola, ... El costo depende de la implementación, en el caso de VMs que generan código enlazado el costo es nulo. ... Menos que insignificante. En el caso...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
2 de Oct, 2006
7:43 pm

... ¿Como nos damos cuenta de esto? ¿Porque tarda en correr el GC? ¿Porque se "congela" el ambiente? ¿Como lo medimos? El mayor drenaje de perfomance...
Sergio Fedi
sfedi
Sin conexión Enviar correo
3 de Oct, 2006
7:36 pm

Hola Sergio, ... Termodinamica :-) El trabajo requerido para determinar que un objeto no es referenciado es mayor que para alocar la memoria necesaria para...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
3 de Oct, 2006
10:45 pm

Hola Ale En el caso de MT los objetos no son movidos durante la vida del objeto. Como afecta esto la performance del sistema ?. En positivo o negativo ? ...
kikote gregoris
kikogregoris
Sin conexión Enviar correo
4 de Oct, 2006
5:22 pm

Simplifica muchas cosas, como poder intercambiar fácilmente referencias con componentes y librerías. En sistemas que manejan gran numero de objetos es muy...
Alejandro F. Reimondo
alereimondo
Sin conexión Enviar correo
4 de Oct, 2006
8:05 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