Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 29-03-2005
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por roman
Está claro que el método GET puede alterar las variables internas pero sin embargo mamcx tiene razón.

Pues va a ser que sí ... yo entendía que simplemente lo que hacía era cambiar el valor de la variable interna, no del teléfono . De todas maneras, el primer mensaje de mamcx me sigue pareciendo demasiado tajante al decir JAMAS. Un ejemplo.

Tengo una clase con una propiedad que apunta a otro objeto interno que ocupa un tamaño considerable en memoria. Inicializo la variable a nil y en el Get de la propiedad, si aun vale nil, instancio el obejto. Estoy "alterando el comportamiento/estado interno de un objeto" y creo que es la mejor manera de hacerlo.... ¿no os parece?
__________________
E pur si muove
Responder Con Cita
  #22  
Antiguo 29-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Thumbs up

Hola roman

No estoy de acuerdo contigo en esto
Cita:
Empezado por roman
Pero, de las dos posibles soluciones que plantea Ohcan, lo que dice Marteens (y cualquier libro de OO) corresponde a la primera, no a la segunda, que es la que Ohcan desea.
si te estás refiriendo a
Cita:
Empezado por Ohcan
Si no son iguales..... tengo 2 opciones:
1. Poner el estado de mi variable = al real
2. al revés, forzar al teléfono a ponerse en el estado que marca la variable.
Verás, el propósito del programa es controlar "al" teléfono () y por eso me decanté por la seguda opción (es decir, en caso de discrepancia de estados, el que manda es el objeto).
Creo que esta decisión no depende de "en qué estemos programando" sino de lo que quiero hacer con la aplicación...
Y al cambiar el estado físico en el Get, me aseguro de que sea el programa el que lleve la voz cantante... además, como tengo que tomar ciertas decisiones fuera del objeto que dependen de su estado, me aseguro de que el teléfono esta "como debe".
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #23  
Antiguo 29-03-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Por eso mismo... nunca digas nunca Jamas!

Bueno pero eso sigue siendo una tarea de lectura... como esperar a leer el Size de un archivo cuando se pregunte... El problema al que apunto (y en base al titulo de este thread) es asignar una tarea de escritura dentro de una de lectura... bueno, es muy confuso... y puede traer efectos laterales posteriormente...

En fin... de todas maneras dentro del contexto de esta discusion creo que quedo claro...
__________________
El malabarista.
Responder Con Cita
  #24  
Antiguo 29-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Cita:
Empezado por marto
Estoy "alterando el comportamiento/estado interno de un objeto"
Creo que realmente no.

Según el título, tal y como dice mamcx, se entiende que hablamos de algo así:
Código Delphi [-]
function GetPropiedad:TTipo;
begin
  Propiedad := OtroValorDistintoDelQueTieneAhora; //Que llamaría al SetPropiedad
  Result := FPropiedad;
end;

Y yo creo que esto último sería incorrecto.

Otra cosa sería, tal y como propones (creo), hacer los cálculos necesarios para hallar el valor ¿no?
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #25  
Antiguo 29-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Ohcan
Verás, el propósito del programa es controlar "al" teléfono () y por eso me decanté por la seguda opción (es decir, en caso de discrepancia de estados, el que manda es el objeto).
Creo que esta decisión no depende de "en qué estemos programando" sino de lo que quiero hacer con la aplicación...
Y al cambiar el estado físico en el Get, me aseguro de que sea el programa el que lleve la voz cantante... además, como tengo que tomar ciertas decisiones fuera del objeto que dependen de su estado, me aseguro de que el teléfono esta "como debe".
¡Pero si yo no he dicho que la segunda opción sea incorrecta! De hecho, basado en lo que describes me parece la más adecuada. Lo "incorrecto", mejor dicho, confuso, es la forma de implementarlo.

// Saludos
Responder Con Cita
  #26  
Antiguo 29-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Cita:
Empezado por roman
Lo "incorrecto", mejor dicho, confuso, es la forma de implementarlo.
Cierto roman. Como decía antes, estaba mezclando dos cosas muy distintas.
Y por eso estaba tan liado.

Ahora creo que me ha quedado mucho más claro.
Desde el Set cambio el estado físico del teléfono porque ese es el objetivo real (ahora lo tengo claro) del Set la propiedad y en base a esta premisa....
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #27  
Antiguo 29-03-2005
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por Ohcan
Y yo creo que esto último sería incorrecto.
Pues yo creo que puede ser correcto
Cita:
Empezado por Ohcan
Otra cosa sería, tal y como propones (creo), hacer los cálculos necesarios para hallar el valor ¿no?
Vamos a ver... llegamos a un punto en el que la linea que separa una cosa y la otra es muy fina. Cuando dices "hacer los cálculos necesarios para hallar el valor", en el fondo, lo que estás haciendo es cambiar el valor de la variable. Evidentemente, el valor se cambiará en algunos casos y en otros no (porque si no, programa un método, no una propiedad) pero en cualquier caso estas cambiando su valor.
Ejemplo:

Código Delphi [-]
constructor TMiClase.Create;
begin
  inherited;
  FPropiedadCostosa := nil;
end;

function TMiClase.GetPropiedadCostosa: TClaseCostosa;
begin
  if not Assigned(FPropiedadCostosa) then
    FPropiedadCostosa := TClaseCostosa.Create;
  Result := FPropiedadCostosa;
end;
__________________
E pur si muove
Responder Con Cita
  #28  
Antiguo 29-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
marto, ¡qué flojo! Esto que describes, que algunos llaman "lazy construction" sigue correspondiendo al modelo:

Calculos;
Result := FPropiedad;

Y los cálculos pueden modificar otras propiedades privadas del objeto, tal como lo hace Marteens por razones de eficiencia básicamente ya que otras propiedades hacen uso de los mismos valores.

Pero aquí se está modificando un aparato externo a fin de cuentas y es lo que es al menos un poco raro. Es algo como:

Código:
function TTelefono.Get: TEstado;
begin
  Result := FEstado;
  DispositivoFisico.Estado := FEstado;
end;
Y es la segunda asignación la que es extraña. En la lógica subyacente se esta escribiendo una propiedad en la lectura de otra (no una variable, una propiedad). Sí, esto es lo que Marteens hace referencia con el principio de Incertidumbre. Y es quizá adecuado para modificar variables internas del objeto a fin de evitar recálculos innecesarios, pero el hecho de que en la física haya tal incertidumbre no significa que debamos, además, crear más incertidumbre en nuestras aplicaciones.

// Saludos
Responder Con Cita
  #29  
Antiguo 29-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
O dicho de otra forma:

Cita:
La mamá le dice a Juan:

- Ve a ver si tu hermana está usando el teléfono.

Y Juan va a ver y de paso le cuelga el teléfono a la hermana


// Saludos
Responder Con Cita
  #30  
Antiguo 29-03-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Lo cual me parece muy bien hecho por parte de Juan... a ver si asi hay menos gastos en la cuenta de telefono!
__________________
El malabarista.
Responder Con Cita
  #31  
Antiguo 29-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mamcx
Lo cual me parece muy bien hecho por parte de Juan... a ver si asi hay menos gastos en la cuenta de telefono!
Pero en la broma está el punto: Juan se toma atribuciones que no le corresponden, a él sólo le pidieron ver (método GET) si estaba ocupado el teléfono.

Otra cosa hubiera sido si la mamá dice:

Cita:
- Juan, ¡quiero el teléfono desocupado!

Y va Juan a colgarle el teléfono a la hermana
Ahora Juan hace lo que se le pidió (método SET)

// Saludos

pd: Ojalá todos los días hubiera discusiones tan ricas como ésta en los foros.
Responder Con Cita
  #32  
Antiguo 30-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Y siguiendo con el ejemplo, sería en realidad:
Cita:
- Juan, ¡mira el teléfono, y déjalo como debería estar!
Y Juan 1º se informa de cómo debería estar y 2º, si no está como debiera, lo cambia

__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #33  
Antiguo 30-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Ohcan
Y Juan 1º se informa de cómo debería estar y 2º, si no está como debiera, lo cambia
Pero entonces-y me parece qe mamcx ya había mencionado algo al respecto, ya no estamos hablando de una propiedad de un objeto (métodos GET o SET) sino de un método regular.

// Saludos
Responder Con Cita
  #34  
Antiguo 30-03-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Eso es ...

Realmente la ayuda ha sido muy buena...
y el hilo ha dado mucho mas de sí de lo que hubiera pensado en un principio
Sobre todo teniendo en cuenta que al principio pensaba que estaba haciendo una cosa y que al final hago otra

Pero... ¡Qué bien viene pensar y razonar!
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:07:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi