Ver Mensaje Individual
  #7  
Antiguo 30-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Yo propongo otra cosa, de la misma índole, pero en otro sentido:
Código Delphi [-]

TForm1 = class (tForm)

private
  Fparam1:string;
  Fparam2:integer;

  procedure Setparam2(value:integer);
  function Getparam2:integer;
public
  constructor Create(Aowner:TObject);override;

  property Parametro1:string read Fparam1 write Fparam1;
  property Parametro1:integer read Getparam2 write Setparam2;
  procedure Execute;
end;

constructor TForm1.Create(Aowner:TObject);
begin
  inherited Create(Aowner);
  Fparam1 := EmptyStr;
  Fparam2 := -1;
end;

procedure TForm1.SetParam2(value:integer);
begin
{ Value es el valor que se le va a asignar desde fuera de la clase
  justo cuando alguien hace Form1.param2 := 33
}
 if Value <> Fparam2 then 
 begin
// podemos comprobar que el antiguo Fparam2 es distinto al 
// valor que se le quiere asignar, y no repetir acciones.
// Además podemos saber el valor que tenía y ahora el valor que tendrá, 
// en algunas situaciones es muy util, porque podemos inicializar variables
// liberar objetos, etc.
end;
end;

function TForm1.GetParam2:integer;
begin
  result := Fparam2;
 // devolvemos la variable privada, igual hay que hacer cálculos u otras cosas
end;

procedure TForm1.Execute;
begin
  if Fparam1 = EmptyStr then
    raise Exception.Create('dale un valor a Parametro1');

  if Fparam2 = -1 then
    raise exception.Create ('dale un valor a Parametro2');

Ventajas:
- Si ahora necesitamos añadir otro parámetro más, no hay necesidad de modificar la declaración del procedimiento Execute, es decir modificar los parámetros de entrada que necesita, simplemente se añade una propiedad más, modificas internamente el método Execute y listo. Normalmente no tienes que modificar el programa que hace uso de la clase.

- Podemos saber los valores antiguos y nuevos de cada parámetro, como ya dije, para inicializar o liberar recursos.

- Su uso es más parecido a la VCL, por tanto en un futuro será intuitivo su uso. ¿el TQuery lleva parámetros en su método Open(sql: string)?, o por ejemplo, ¿el TOpenDialog en su método Execute?, pues por eso mismo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 30-10-2006 a las 11:01:10.
Responder Con Cita