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
  #1  
Antiguo 09-05-2006
luismolina luismolina is offline
Registrado
 
Registrado: may 2006
Posts: 2
Poder: 0
luismolina Va por buen camino
Clase Serializable

Hola Amigos soy nuevo en esto del OOP en delphi y tengo experiencia en java, y me gustaria saber como puedo crear una clase en delphi, y luego guardarla en un archivo.

Código:
Public class Ecuaciones implements Serializable {
  /**
   * Ecuaciones
   */
  public Ecuaciones() {
  }

  private String nombre;
  private String apellido;

  public void setNombre(String nombre) {
    this.nombre = nombre;
  }

  public void setApellido(String apellido) {
    this.apellido = apellido;
  }

  public String getNombre() {
    return this.nombre;
  }

  public String getApellido() {
    return this.apellido;
  }
Quisiera saber como puedo hacer esto en delphi, y como podria guardar esta clase en un archivo para luego recuperarla, muchas gracias.

Última edición por dec fecha: 09-05-2006 a las 21:10:24.
Responder Con Cita
  #2  
Antiguo 09-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 19
waltergomez Va por buen camino
Podes usar TFileStream.WriteComponent y TFileStream.ReadComponent .
El formato es propietario si queres serializar en XML hay por la red algunas libreria libres.

Saludos,
Responder Con Cita
  #3  
Antiguo 09-05-2006
luismolina luismolina is offline
Registrado
 
Registrado: may 2006
Posts: 2
Poder: 0
luismolina Va por buen camino
Gracias..

Gracias por la respuesta walter, pero lo que yo quiero es saber como puedo hacer la clase que escribi anteriormente en delphi, y como guardarla en un archivo. y me gustaria saber como utilizar esto con lo que tu me escribiste.
Responder Con Cita
  #4  
Antiguo 09-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 19
waltergomez Va por buen camino
Tu clase debe derivar de TComponent.

Para grabar el component en un archivo;

Código Delphi [-]
procedure TForm1.SaveComponentToFile(sFilename: string);
var
  FS: TFileStream;
begin
  FS := nil;
  try
    FS := TFileStream.Create(sFileName, fmCreate);
    FS.WriteComponent(TuComponente);
  finally
    FS.Free;
  end;
end;

Y para leer desde el archivo,

Código Delphi [-]
procedure TForm1.ReadComponentFromFile(sFilename: string);
var
  FS: TFileStream;
begin
  FS := nil;
  try
    FS := TFileStream.Create( sFileName, fmOpenRead );
    FS.ReadComponent(TuComponente);
  finally
    FS.Free;
  end;
end;


Pero primero deberias pasar esa clase java a delphi.

Espero te sirva,
Responder Con Cita
  #5  
Antiguo 09-05-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una traducción del código que copiaste, pensando en derivar la clase de "TComponent" para hacer uso de lo que dice el compañero Walter, podría ser como sigue en Delphi:

Código Delphi [-]
unit UEcuaciones;

interface

uses
  Classes;

type
  TEcuaciones = class(TComponent)
  private
    FNombre, FApellido: string;
  public
    constructor Create(AOwner: TComponent); override;
    function GetNombre : string;
    function GetApellido : string;
    procedure SetNombre(nombre: string);
    procedure SetApellido(apellido: string);
  end;

implementation

{ TEcuaciones }

constructor TEcuaciones.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  { TODO }
end;

function TEcuaciones.GetNombre: string;
begin
  Result := Self.FNombre;
end;

function TEcuaciones.GetApellido: string;
begin
  Result := Self.FApellido;
end;

procedure TEcuaciones.SetNombre(nombre: string);
begin
  if (Self.FNombre <> nombre) then
    Self.FNombre := nombre;
end;

procedure TEcuaciones.SetApellido(apellido: string);
begin
  if (Self.FApellido <> apellido) then
    Self.FApellido := apellido;
end;

end.

Sin embargo, fíjate que los métodos "Gets" y "Sets" no hacen sino asignar un nuevo valor a las variables que nos interesan, por un lado, y por otro devolver el valor de dichas variables. Entonces podríamos simplicar un poco el código en Delphi, gracias a las "propiedades":

Código Delphi [-]
unit UEcuaciones2;

interface

uses
  Classes;

type
  TEcuaciones = class(TComponent)
  private
    FNombre, FApellido: string;
  public
    constructor Create(AOwner: TComponent); override;
    property Nombre: string read FNombre write FNombre;
    property Apellido: string read FApellido write FApellido;
  end;

implementation

{ TEcuaciones }

constructor TEcuaciones.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  { TODO }
end;

end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 09-05-2006
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
Sólo un comentario:

Para que el código de walter funcione con la clase de dec, la propiedades deben declararse como published en lugar de public.

// Saludos
Responder Con Cita
  #7  
Antiguo 09-05-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ea, pues ya sabemos otra cosa nueva. Gracias Román.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 09-05-2006
Avatar de waltergomez
waltergomez waltergomez is offline
Miembro
 
Registrado: may 2006
Posts: 202
Poder: 19
waltergomez Va por buen camino
Si queres profundizar y tomarte algunas aspirinas podes serializar una clase que no derive de TComponent.
Delphi al igual que Java tiene funciones que te permiten acceder a las propiedades y metodos tanto public como published de otras clases.
En la unidad TypInfo.pas hay muchas funciones realizar esto.

Este ejercicio te permitira obtener conocimiento para despues crear Wizards o Expertos.

Aqui tenes buenos expertos http://www.gexperts.org/

Saludos,
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda Con Clase DES edgusano .NET 2 04-04-2005 22:05:41
Métodos de clase. jplj OOP 14 22-11-2004 09:30:19
...la clase... Jure Humor 0 27-07-2004 20:00:47
Una clase al ClipBoard bustio OOP 2 07-07-2004 00:35:16
Clase NO registrada marcial Varios 3 05-12-2003 14:50:38


La franja horaria es GMT +2. Ahora son las 14:37:39.


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