Ver Mensaje Individual
  #13  
Antiguo 29-03-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El codigo que pones de ejemplo es correcto. Esta RELEYENDO las propiedades pero igual no deberia de OPERAR sobre ellas. Si estuviera leyendo un archivo es OK releer por ejemplo el CHECKSUM cuando se altere el Size del archivo... pero no asignar la fecha del mismo.

Mira las respuestas... cuantas dicen algo como "no se si estoy claro"
"espero que me entiendas" "a ver si me explico" ESO DEMUESTRA que el diseño de la clase esta fundamentalmente errado. NO quiere decir que no se pueda truquear aqui y alla... pero para que dificil si se puede facil? Un ejemplo:

TCarro
property Temperatura:Integer

Que crees que lee Temperatura? Es simple, se espera que Temperatura, que es una propiedad lea el dato que corresponde a Carro. Es el comportamiento esperado. Pero luego alguien dira: Y que de la temperatura exterior? Pues simple:

TCarro
property Temperatura:Integer
property TemperaturaExterior:Integer

Pero es que necesito hacer una correcion si la temperatura exterior es muy baja o alta debo aumentar/baja la temperatura del carro. Imaginemos que el condenado carro es de la NASA y va pa Marte y no queremos que se nos congelen los astronautas. Entonces... muevo a Temperatura en base a la Temperatura Exterior?

Pues chico... si se mete un VERBO en lo que estoy haciendo YA NO es una propiedad. Es un metodo. En OO lo mas dificil es llamar los objetos y sus partes Propiedades=Adjetivos Metodos=Verbos Eventos=Verbos con tiempo o de reaccion... y no se deberia alterar el significado de Adjetivo a verbo de solo porque si. Si fue enruedado para quien escribio la clase... como crees que sera para el siguiente que la use?

Es claro. Estado debe leer de TMiObjeto. El estado externo es OTRO estado. No debe una propiedad que lee un valor leer el significado de dos valores (a menos que devuelva un valor de tipo multiple como un recordset, una matriz o algo asi, pero no es la solucion aqui). Eso es complicar mucho las cosas....

Es mucho mas simple:

Código Delphi [-]
 type
  //[...]
  TEstados = (eDesconocido,eLibre,eOcupado);  //Tipo de estados de la máquina
  TMiObjeto = class(TElOCX) //Heredo de un OCX
  protected
    FEstado:TEstados;
  private
    procedure SetEstado(NuevoEstado:TEstados);
    function GetEstado:TEstados;
  public
    property Estado:TEstados read GetEstado Write SetEstado;
    property EstadoExterno:TEstados read GetEstado;
    function SincronizarEstado:TEstados;
    destructor Destroy;override;
    constructor Create(AOwner: TComponent);override;
  end;

Entonces el comportamiento de la clase es obvio. Estado retorna el estado ACTUAL de la clase. EstadoExterno consulta el del telefono. SincronizarEstado asigna el estado correcto en base a los dos estados y retorna el nuevo estado.
__________________
El malabarista.
Responder Con Cita