Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Crear clase. Basico de POO.

Buenas, estoy haciendo un programa que me identifique todos los recursos compartidos de red. Consigo localizarlos y demás, pero para trabajar con ellos necesitro crear una clase, TOrdenador, por ejemplo....

Seria de la siguiente forma...
TOrdenador contendria:
Ip:string;
Hostname:string;
Recursos:TStringList;

No le veo mucha complicación, solo la mía porque no se POO... ni se donde colocar la clase, ni cómo acceder a ella.

Gracias por adelantado, a todos.
__________________
:)
Responder Con Cita
  #2  
Antiguo 11-08-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola

Primero que nada enviarte un fuerte abrazo, que hacía tiempo no te leía y ya se te estraña.

Con respecto a tu pregunta te diré que aunque no soy un maestro en el asunto trataré de ayudarte:

Te puedes crear una nueva unidad para tu clase:

Código Delphi [-]
 interface
 uses Classes;
Type
   TOrdenador = Class(TObject)
   Private
     FIp : String;
     FHostname:string;
     FRecursos:TStringList;
    FRcursos: TStringList;
    procedure SetHostname(const Value: String);
    procedure SetIp(const Value: String);
    procedure SetRcursos(const Value: TStringList);
   Public
     Property Ip : String Read FIp Write SetIp;
     Property Hostname : String Read FHostname Write SetHostname;
     Property Rcursos : TStringList Read FRcursos Write SetRcursos;
     Constructor Create;
     Destructor Destroy;override;
   end;
implementation
{ TOrdenador }
constructor TOrdenador.Create;
begin
   FRecursos := TStringList.Create;
end;
destructor TOrdenador.Destroy;
begin
  FRecursos.Free;
  inherited;
end;
procedure TOrdenador.SetHostname(const Value: String);
begin
  if FHostname <> Value then
    FHostname := Value;
end;
procedure TOrdenador.SetIp(const Value: String);
begin
  if FIp <> Value then
    FIp := Value;
end;
procedure TOrdenador.SetRcursos(const Value: TStringList);
begin
  FRcursos.Assign(Value);
end;
end.

Bueno también puedes declarar métodos públicos para tu clase, pero no los comentas, pero básicamente es así, claro que puedo estar equivocado, pero de ser así ya alguien se encargará de rectificarme.

Saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #3  
Antiguo 11-08-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola

Bueno pues ahora mismo parese que mi clase da un problema, en una prueba que hice:
Código Delphi [-]
 implementation
    Uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
  FPc : TOrdenador;
begin
 try
  FPc := TOrdenador.Create;
  FPc.Rcursos.Add('1');//aqui se para pr error de acceso a la memoria
  FPc.Rcursos.Add('2');
  FPc.Rcursos.Add('3');
  ShowMessage(FPc.Rcursos.Text);
 finally
  FPc.Free;
 end;
end;

Estoy investigando que es lo que está pasando, desde que de con el problemo te alumbro, si alguien sabe el por que ya seremos dos los agradecidos.
Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #4  
Antiguo 11-08-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola

Nada era un problema con la palabra Recurso que se declaró mal por accidente, a continuación te pongo el código arreglado:

Código Delphi [-]
 
interface
 uses Classes;
Type
   TOrdenador = Class(TObject)
   Private
     FIp : String;
     FHostname:string;
     FRecursos:TStringList;
     procedure SetHostname(const Value: String);
     procedure SetIp(const Value: String);
     procedure SetRecursos(const Value: TStringList);
   Public
     Property Ip : String Read FIp Write SetIp;
     Property Hostname : String Read FHostname Write SetHostname;
     Property Recursos : TStringList Read FRecursos Write SetRecursos;
     Constructor Create;
     Destructor Destroy;override;
   end;
implementation
{ TOrdenador }
constructor TOrdenador.Create;
begin
   FRecursos := TStringList.Create;
end;
destructor TOrdenador.Destroy;
begin
  FRecursos.Free;
  inherited;
end;
procedure TOrdenador.SetHostname(const Value: String);
begin
  if FHostname <> Value then
    FHostname := Value;
end;
procedure TOrdenador.SetIp(const Value: String);
begin
  if FIp <> Value then
    FIp := Value;
end;
procedure TOrdenador.SetRecursos(const Value: TStringList);
begin
   FRecursos.Assign(Value)
end;
end.
Bueno espero te ayude, Buena suerte AMIGO

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo


Última edición por yusnerqui fecha: 11-08-2005 a las 23:53:31.
Responder Con Cita
  #5  
Antiguo 12-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
¡Hombre yusnerqui! ¿Que hay?... ¿Donde esta el burro?... :s (antes tenias en el avatar el burro de shrek, si no empiezo a desvariar... :P)...

Pues si, hacía tiempo que no entraba... ya que he estado liado con C y C++... y Delphi lo he tocado poco... además he estado diseñando la página de mi madre (que aún la sigo diseñando... aunque ahora solo haya subido un fake para mientras tanto...)... por lo que no he tenido mucho tiempo. :\

Que se le va a hacer... es lo que hay... ... ¿que has estado haciendo tu mientras tantooo? que te tengo perdido :P

Vaya, esa clase funciona fenomenal y me viene como anillo al dedo... Lo que no se es cómo declararla como un array... por ejemplo...
Código Delphi [-]
 Ordenadores : Array[0..MAX_INT] of TOrdenadores
.... supongo que seria algo asi, pero no se dónde colocarlo... ¿Debajo de
Código Delphi [-]
var
   FormX:TFormX
quizás?... :s

Gracias una vez más, simplemente por leer mis pesados tochos :\
__________________
:)
Responder Con Cita
  #6  
Antiguo 12-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Un pequeño detalle que puede ser curioso.

Al declarar Recursos, creo que sería conveniente hacerlo así:
Código Delphi [-]
  Property Rcursos : TString Read FRcursos Write SetRcursos;
Lo demás que da igual. ¿Por qué? porque así puedes usar algo como:
Código Delphi [-]
memo1.Lines.Assign(Miordenador.Recursos);

DarkByte mira este hilo sobre el TObjectList te olvidas de usar arrays directemente.

Por supuesto busca por TobjectList, se ha explicado varias veces su uso.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 12-08-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola

Cita:
Empezado por DarkByte
¡Hombre yusnerqui! ¿Que hay?...
Pues aquí me ves, pequeño hermano, como siempre, tratando de encontrarle las 4 patas al gato
Cita:
Empezado por DarkByte
¿Donde esta el burro?...
Es que el burro no me hacía justicia , consideré que este se acercaba más a mi vida cotidiana como programador
Cita:
Empezado por DarkByte
Pues si, hacía tiempo que no entraba... ya que he estado liado con C y C++... y Delphi lo he tocado poco...
Pues hombre, tienes que administrar mejor tu tiempo, no debes renunciar a los viejos amores.
Cita:
Empezado por DarkByte
¿que has estado haciendo tu mientras tantooo? que te tengo perdido :P
Pues aquí, en el lugar de siempre, haciéndole la vida imposible a mi ordenador, y tratando de aprender cada día un poquito más.
Cita:
Empezado por Lepe
Un pequeño detalle que puede ser curioso.
Pues muchas gracias por la aclaración, me parece muy oportuna, a mi favor solo tengo que decir que transcribí el nombre y tipo de datos que suministró el amigo DarkByte sin percatarme de esta particularidad.

Saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #8  
Antiguo 12-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
A ver... voy a practicarlo y a ver que tal... porque tantos conceptos nuevos... :s

Muchísimas gracias, informaré con el resultado de la "operación" :P
__________________
:)
Responder Con Cita
  #9  
Antiguo 13-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Uf.. lo siento por mi torpeza... pero entre que estoy MUY verde en esto de POO y que hay un montón de cosas nuevas del tirón.. no me aclaro. He entendido más o menos el funcionamiento del TObject list, y lo de crear la var Lista:TObjectList y demás... pero no consigo entender el código como para aplicarlo a mi proyecto.

Gracias por vuestra ayuda una vez más.
__________________
:)
Responder Con Cita
  #10  
Antiguo 13-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pseudocodigo, pero creo que se entiende el método:
Código Delphi [-]

Form1 = class(Tform)

private
   Lista:TobjectList;


procedure  Form1 Oncreate;
begin
  if not Assigned(Lista) then
   Lista := TobjectList.Create(true);
    // el parametro true, hace que cuando liberemos la lista, tambien se liberen 
   // los  Tordenadores que tiene dentro
end;

Procedure form1 OnClose;
begin
  if assigned(Lista) then
    freeandnil(Lista);
 // destruimos la lista y todos los ordenadores que lleve dentro.
end;

Procedure Form1Button1Click();
var ord :TOrdenador
     i:integer;
begin
  for i:=0 to 5 do // creamos 6 ordenadores
  begin
    ord := Tordenador.Create;
    ord.IP := '192.168.2.' + inttostr(i);
    
    Lista.Add(ord);
  end;
end;
Listo, ya tenemos 6 ordenadores creados dentro del TObjectList. Para acceder al segundo ordenador usaríamos:
Código Delphi [-]
var miIP :String;
begin
   if Assigned(lista) and 
     (Lista.Count > 2) then
   begin
     miIP := Tordenador(Lista.items[1]).Ip;
     memo1.lines.Assign(Tordenador(Lista[items[1]).Recursos);
  end;
end;

¿Ves algo raro? es la forma de trabajar en delphi con todas las instancias de objetos.

Un saludo.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 20-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
El código parece perfecto. Únicamente no encuentro la uses del TString :S

Gracias una vez más
__________________
:)
Responder Con Cita
  #12  
Antiguo 22-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En el editor de código pon el cursor sobre la palabra TStrings y F1.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #13  
Antiguo 22-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Ya lo hice... y me encontré el TStringList.. pero no el TString :\

De todos modos, volveré a buscar :P
__________________
:)
Responder Con Cita
  #14  
Antiguo 22-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
TStrings



edito:Probado y sale del tiron la ayuda
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #15  
Antiguo 22-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Cita:
Empezado por DarkByte
Lo que no se es cómo declararla como un array... por ejemplo...
Código Delphi [-]
 Ordenadores : Array[0..MAX_INT] of TOrdenadores
no te recomendaria crear un vector de esta forma dado que estaras reservando una gran cantidad de memoria que nunca vas a ocupar.

La solución es crear vectores dinámicos. Lo definis asi, sin declarar la cantidad
Código Delphi [-]
 Ordenadores : Array of TOrdenadores;

Luego en tu código especificas la cantidad que queres
Código Delphi [-]
  SetLength(Ordenadores, cantidad);

si queres uno más
Código Delphi [-]
  SetLength(Ordenadores, Length(Ordenadores)+1);

y los accedes igual que cualquier vector, pero recuerda que el primero es el indice cero.

Cita:
Empezado por DarkByte
pero no se dónde colocarlo... ¿Debajo de
Código Delphi [-]
var
   FormX:TFormX
Puede ser ahi, o en cualquier otro lado, por ejemplo si tenes una unit con definiciones de constantes y variables globales podrias ponerlo ahi.
__________________
[Crandel]
Responder Con Cita
  #16  
Antiguo 22-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Se desperdicia memoria RAM según el valor de Max_Int.

TOrdenadores deriva de TObject, por tanto, cada elemento del Array es un puntero (4 Bytes), 1000 elementos serían 4kb de memoria.

Eso sí, tiene más trabajo, inicializarlos a nil, comprobar que no es nil al acceder a ellos, y por último poner a nil cada elemento al liberarlo de memoria.

Básicamente es lo que hace un TList, por eso es conveniente usar el TobjectList, aprovechando el resto de propiedades y métodos que trae (Count, Sort, Pack, etc.).

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #17  
Antiguo 24-08-2005
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Muchisimas gracias. Funciona a la perfeccion.

Creo que de momento desperdiciare un poco de memoria... hasta que ya tenga claro los conceptos :\
__________________
:)
Responder Con Cita
  #18  
Antiguo 24-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 22
Crandel Va por buen camino
Cita:
Empezado por DarkByte
Creo que de momento desperdiciare un poco de memoria... hasta que ya tenga claro los conceptos :\
Si 8 Gb de memoria RAM te parece un poco !!!!

son MAXINT*4 bytes = 8 Gb
__________________
[Crandel]
Responder Con Cita
Respuesta


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


La franja horaria es GMT +2. Ahora son las 12:52:42.


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