Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 07-03-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Muchas gracias por sus valiosas respuestas.

He tenido la sensación de estar enfocando mal el problema, pero algo me dice quizá no voy tan mal. Elevar excepciones desde el interior de un constructor es algo normal cuando no están dadas las condiciones estrictamente necesarias para que la instancia exista. Pero a veces la instancia puede o no puede existir, sin que lo último amerite generar un error o aviso.

Hice un ejemplo un poquitín menos "abstracto":
Código Delphi [-]
type
  TXFile = Class
    Constructor Create (Const Path :String);
    Class Function Make (Path :String) :TXFile;
  End;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    XFile1, XFile2, XFile3 :TXFile;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Constructor TXFile.Create (Const Path :String);
Begin
  // ...
End;

Class Function TXFile.Make (Path :String) :TXFile;
Begin
  If Not FileExists (Path) Then  // Si el archivo indicado no existe
  Begin
    // Intentamos con uno de respaldo
    Path := 'C:\Respaldos\' + ExtractFileName (Path);

    If Not FileExists (Path) Then  // Si el respaldo tampoco existe
    Begin
      Result := Nil;  // No hay archivo con ese nombre, situación aceptable
      Exit;
    End;
  End;

  Result := Create (Path);
End;

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Sin el método TXFile.Make (o una función que haga lo mismo que Make),
    este bloque de código sería más grande: }
  XFile1 := TXFile.Make ('C:\Hugo.x');
  XFile2 := TXFile.Make ('C:\Paco.x');
  XFile3 := TXFile.Make ('C:\Luis.x');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  XFile1.Free;
  XFile2.Free;
  XFile3.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // ...

  If XFile1 <> Nil Then
    // ...

  // ...

  If XFile2 <> Nil Then
    // ...

  // ...

  If XFile3 <> Nil Then
    // ...

  // ...
end;

Lo de Make fue por buscar un sinónimo de Create, algo que, quizá (y ahí tengo mi mayor duda) pudiera llegar a ser acuñado y con el tiempo dejar de sonar confuso o ambiguo. Una palabra que "insinúe" una acción semejante a la del constructor, pero que al mismo tiempo se diferencie de éste, entendiéndose que podemos obtener un Nil si cierta condición (que podría estar documentada) no se cumple en la llamada a ese método especial.

«Oh, mire compañero, la clase tiene método Make, hay que usarlo en esta parte del programa. Según dice aquí, devuelve Nil cuando...»

Me empieza a gustar el nombre TryCreate que propusieron en mensajes anteriores. TryOrNil se entiende también, pero se pierde un poco el sentido de "crear".

Otro camino es que este tipo de métodos se definan con nombres más explícitos y acomodados a cada clase y situación en particular, con lo cual ya no tendríamos una candidatura a estándar.

Y bueno, también está la opción de crear una función normal o de otra clase, que haga la tarea, pero creo que es más correcto que la propia clase se encargue de validar o verificar lo que a la clase concierne. ¿No creen?

Bueno, a alguna conclusión habremos de llegar entre todos.

¡Saludos!
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Encontrar objeto por su nombre, encontrar metodo, ejecutar metodo coso Trucos 7 02-09-2011 00:23:13
Cambiar el nombre de la clase. rauros Varios 2 02-08-2008 20:56:44
Crear formularios a partir de su nombre de clase kes .NET 6 21-02-2008 08:06:07
Crear Objeto por su nombre de clase jlrbotella OOP 2 08-01-2008 23:44:37
nombre de variables de una clase Mariana OOP 8 25-10-2005 17:48:34


La franja horaria es GMT +2. Ahora son las 20:39:26.


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