Crear Clases en Delphi - Foros Club Delphi

9
28/10/2015 crear clases en delphi Foros Club Delphi http://www.clubdelphi.com/foros/showthread.php?t=30889 1/9 #1 #2 #3 FTP CCD Buscar Trucos Trabajo Foros Foros Club Delphi > Principal > Varios crear clases en delphi Nombre de Usuario Nombre de Usu ¿Recordarme? Contraseña Iniciar Sesión Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy Herramientas Buscar en Tema Desplegado 22042006 alextmb Miembro Registrado: Nov 2005 Posts: 14 crear clases en delphi hola amigos de clubdelphi.com nesecito de su ayuda, ojala y alguien pudiera proporcionarme un ejemplo de como crear una clase en tiempo de ejecucion en delphi y responder si ¿Puedo crear clases como si fuera un arreglo?. Necesito crear 20 clases similares.De antemano Gracias 22042006 Sinaloense Miembro Registrado: Oct 2003 Posts: 139 No se pueden crear clases, lo que se hace es instanciar objetos. 22042006 dec Moderador Registrado: Dec 2004 Ubicación: Alcobendas, Madrid, España Posts: 12.025 Hola, A ver si nos entendemos. Una clase es una clase, y un objeto es un objeto. Un objeto es la instancia de una clase. Una clase es como un molde de un objeto. No tienes que crear veinte clases (creo), sino que tienes que crear 20 objetos de una determinada clase. ¿Cómo se instancia una clase de objeto en Delphi? ¿Cómo se crean objetos de una clase? Mediante los constructores conque cada clase cuenta, que no son sino unos métodos "especiales" que inicializan variables, preparan un objeto, en fin, de una determinada clase. Su contraparte está en los "destructores", que se utilizan para liberar memoria, por ejemplo, o para cualquier otra tarea que hubiera que llevar a cabo cuando se destruye un determinado objeto de cierta clase. ¿Pero cómo creas un objeto, demonios? Te estarás preguntando. No soy yo el más indicado para estar aquí ahora escribiendo esto, sin modestia lo digo, pero, en definitiva, tendrás que fijarte en el constructor o constructores (porque puede haber más de uno) de la clase en cuestión, para saber cómo tienes que tratar con ello.

description

Crear Clases en Delphi - Foros Club Delphi

Transcript of Crear Clases en Delphi - Foros Club Delphi

Page 1: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 1/9

#1

#2

#3

FTP CCD Buscar Trucos Trabajo Foros

Foros Club Delphi > Principal > Varios crear clases en delphi

Nombre de Usuario Nombre de Usuario¿Recordarme?

Contraseña Iniciar Sesión

Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Herramientas Buscar en Tema Desplegado

22­04­2006

alextmb Miembro

Registrado: Nov 2005Posts: 14

crear clases en delphi

hola amigos de clubdelphi.com nesecito de su ayuda, ojala y alguien pudiera proporcionarme un ejemplo decomo crear una clase en tiempo de ejecucion en delphi y responder si ¿Puedo crear clases como si fuera unarreglo?. Necesito crear 20 clases similares.De antemano Gracias

22­04­2006

Sinaloense Miembro

Registrado: Oct 2003Posts: 139

No se pueden crear clases, lo que se hace es instanciar objetos.

22­04­2006

dec Moderador

Registrado: Dec 2004Ubicación: Alcobendas, Madrid, EspañaPosts: 12.025

Hola,

A ver si nos entendemos.

Una clase es una clase, y un objeto es un objeto. Un objeto es la instancia de una clase. Una clase es como unmolde de un objeto. No tienes que crear veinte clases (creo), sino que tienes que crear 20 objetos de unadeterminada clase.

¿Cómo se instancia una clase de objeto en Delphi? ¿Cómo se crean objetos de una clase? Mediante losconstructores conque cada clase cuenta, que no son sino unos métodos "especiales" que inicializan variables,preparan un objeto, en fin, de una determinada clase.

Su contraparte está en los "destructores", que se utilizan para liberar memoria, por ejemplo, o para cualquierotra tarea que hubiera que llevar a cabo cuando se destruye un determinado objeto de cierta clase.

¿Pero cómo creas un objeto, demonios? Te estarás preguntando. No soy yo el más indicado para estar aquíahora escribiendo esto, sin modestia lo digo, pero, en definitiva, tendrás que fijarte en el constructor oconstructores (porque puede haber más de uno) de la clase en cuestión, para saber cómo tienes que tratar conello.

Page 2: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 2/9

¿Un ejemplo? De acuerdo. Creemos una instancia de la clase "TEdit", por ejemplo, que sabes que es un controlvisual de los que vienen en la pestaña "Standard" de la paleta de componentes de Delphi.

¿Dónde se encuentra definida la clase "TEdit"? En la unidad "StdCtrls" (de Standard Controls). Pues bien, loprimero sería requerir esa unidad, para poder trabajar con la clase "TEdit", ya sabes:

Código Delphi [­]

uses StdCtrls;

Ahora tendremos que buscarle un hogar a la instancia del objeto que queremos crear. Digamos que unavariable del tipo de objeto que queremos crear nos puede venir bien. Así que declaremos una variable de esetipo en donde sea... bueno, en donde sea que nos haga falta, por ejemplo, supongamos que vamos a utilizar unobjeto "TEdit" que crearemos en tiempo de ejecución en un formulario:

Código Delphi [­]

unit Unit2;

interface

uses Forms, StdCtrls;

type TForm2 = class(TForm) private MiEdit: TEdit; // aquí estoy end;

var Form2: TForm2; MiEdit: TEdit; // o aquí también

implementation

$R *.dfm

var MiEdit: TEdit; // incluso aquí

end.

¿Ves la variable "MiEdit" declarada en la sección "private" de la clase "TForm2"? También ves cómo pudimosdeclararla fuera de la clase "TForm2", en la cláusula "interfaz" de la unidad que contiene el formulario, eincluso pudimos declararla en la cláusula "implementation".

Igualmente podríamos haberla declarado dentro de un procedimiento, función o método. Por ejemplo, imaginaque dentro de la cláusula "implementation" de la unidad anterior tuviéramos algo así:

Código Delphi [­]

procedure TForm2.Button1Click(Sender: TObject);var MiEdit: TEdit;begin

Page 3: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 3/9

end;

Estaríamos declarando una variable capaz de contener la referencia de un objeto de la clase "TEdit" dentro delmétodo "Button1Click", en este caso.

Muy bien. ¿Pero cómo creo el objeto? Vamos a ello. Sigamos con la variable que declaramos en el métodosusomentado. Así creamos una instancia de la clase "TEdit":

Código Delphi [­]

procedure TForm2.Button1Click(Sender: TObject);var MiEdit: TEdit;begin MiEdit := TEdit.Create(Self); MiEdit.Parent := Self;

MiEdit.Free;end;

Vamos por líneas. Primero hacemos uso del constructor de la clase "TEdit", el cual nos pide como parámetroun componente "propietario" para el objeto "TEdit" que queremos crear. Nosotros le damos como padre el"Form2", es decir, como sabes, la variable "Self" contiene una referencia al objeto en cuyo método estamostrabajando, que en este caso es "Form2". El propietario del "TEdit" se encargará de liberar la memoria ocupadacon este en su destrucción, en la del propietario mismo, aunque nosotros podemos encargarnos de esa tareatambién por nuestra cuenta.

El objeto, a partir de ahí, está ya en memoria, vivito y coleando, pero, no le veríamos sino fuera por lasiguiente línea. Este "TEdit" es muy suyo, y, como otros controles similares, además de un "propietario" nossolicita un "padre". Es como si nos preguntara, "está bien, aquí estoy, pero, ¿dónde quieres que me muestre?"Y nosotros le respondiéramos con las mismas, ¡en el mismo formulario, y deja ya de ser pesado y muéstrateya!

Y el "TEdit" obediente se muestra... ¡pues no faltaba más!

Pero una instrucción más abajo, oh, amigo, la vida es así, destruimos el "TEdit", liberamos su memoria yadiós, ahí te pudras. Porque ya no nos hacía falta, naturalmente. De otro modo podríamos seguir usándolohasta cuando hubiéramos querido.

¿Diferencias entre declarar la variable "TEdit" en la clase del formulario, en la cláusula "interface", en lacláusula "implementation" o en el procedimiento, como hemos hecho? Bueno. Eso para otra pregunta, que yaestoy viendo que me estoy enrollando demasiado con esta, y no sé yo hasta dónde vamos a llegar...

Pero... ¡casi se me olvida! ¡Tú querías crear veinte clases, digo objetos! ¡De una tacada! (?) ¡Y en tiempo deejecución! ¡Vade retro! Bueno. Pues como casi con todo en esto de la programación, habrá varias formas deenfocar las cosas, y en parte tiene que ver qué pretendemos conseguir.

Si te explayas un poco más en lo que necesitas, tal vez alguien pueda ofrecerte más información. Yo te diríarespondería que puedes crear un arreglo de los "TEdit" (seguimos con el ejemplo), o puedes utilizar unavariable que contenga (o vaya conteniendo) los "TEdit" que necesites... no sé qué decirte, porque tampoco séqué necesitas realmente.

Aquí te dejo algo de código escrito a vuela pluma, que seguramente contenga errores, pero tal vez pueda dartealguna idea. Se admiten sugerencias a todas horas de lunes a viernes y sábados y festivos que no sean deguardar.

Código Delphi [­]

Page 4: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 4/9

#4

uses Contnrs; // Contiene la clase TObjectList

var // Un array preparado para contener 20 TEdit FEditsA: array [0..19] of TEdit;

procedure TForm1.Button1Click(Sender: TObject);var i: integer;begin Randomize; for i := 0 to High(FEditsA) do begin FEditsA[i] := TEdit.Create(Self); FEditsA[i].Parent := Self; FEditsA[i].SetBounds(Random(Self.Width‐100), Random(Self.Height‐20), 100, 20); end;end;

var FEditsB: TObjectList;

procedure TForm1.Button2Click(Sender: TObject);var nEdit: TEdit;begin nEdit := TEdit.Create(Self); nEdit.Parent := Self; Randomize; nEdit.SetBounds(Random(Self.Width‐100), Random(Self.Height‐20), 100, 20);

if not Assigned(FEditsB) then FEditsB := TObjectList.Create;

FEditsB.Add(nEdit);

ShowMessage(Format('Edits en FEditsB: %d', [FEditsB.Count]));end;

procedure TForm1.FormDestroy(Sender: TObject);begin FEditsB.Free;end;

No comento el código porque creo que más o menos podrá entenderse, y porque ya me he cansado un poco deaporrear las teclas... pero puedes comentar lo que te parezca del mismo, que aquí estaremos en cuantohayamos descansado un poco. __________________David Esperaltawww.davidesperalta.com

22­04­2006

alextmb Miembro

Registrado: Nov 2005Posts: 14

error de escritura

perdon es que no me di ha entender en mi primer mensaje, soy novato y como que me enredo un poco alexplicarme, pero si por ain va mi duda, lo que nesecito hacer es crear una clase y en esa clase tengo quecrear 20 image con el codigo que me has dado me explica muchas cosa, pero tambien me abre algunas dudas.

Page 5: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 5/9

#5

¿que es lo que hace la linea?

Código Delphi [­]

MiEdit.Free;

y que a que se refiere utilizando la palabra self?

por resolver mis dudas y escribir tanto gracias.

23­04­2006

dec Moderador

Registrado: Dec 2004Ubicación: Alcobendas, Madrid, EspañaPosts: 12.025

Hola,

Cita:

perdon es que no me di ha entender en mi primer mensaje, soy novato y como que me enredo un pocoal explicarme, pero si por ain va mi duda, lo que nesecito hacer es crear una clase y en esa clasetengo que crear 20 image (...)

Bueno. A lo mejor es que nosotros nos hemos empeñado en verlo de la manera en que no era... Ahora creocomprender más o menos a lo que te refieres. Luego luego te explicaré porqué digo que logro comprenderlomás o menos.

Cita:

¿que es lo que hace la linea?

Código Delphi [­]

MiEdit.Free;

Bueno, según la ayuda de Delphi "Free" es un método de la clase "TObject" (de la que descienden todos losobjetos en Delphi, directa o indirectamente) que sirve para:

Cita:

Empezado por Ayuda de DelphiDestroys an object and frees its associated memory, if necessary.

Cita:

y que a que se refiere utilizando la palabra self?

Se trata de un identificador que "pone Delphi" para...

Cita:

Empezado por Ayuda de DelphiWithin the implementation of a method, the identifier Self references the object in which the method iscalled.

Page 6: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 6/9

#6

Ahora, si te parece, vamos a lo de porqué decía que comprendo más o menos lo que quieres decir cuandodices que quieres crear una clase que contenga 20 "TImage" (supongo que te refieres a objetos de la clase"TImage" cuando hablas de imágenes).

Yo no soy muy bueno en la programación orientada a objetos (bueno, en realidad en ningún paradigma deprogramación, pero, no estoy aquí ahora para quejarme). Lo que se me ocurre es que para lo que quiereshacer habrá más de una solución, más de un posible camino que andar.

¿Usarás todas las imágenes desde un principio? ¿Se trata, por el contrario, de ir añadiendo imágenes segúnsea necesario, pero es posible que nunca se llegue al límite de 20 imágenes? Son preguntas que se meocurren, porque, tengo mis dudas sobre lo que pretendes conseguir.

Si te has fijado en el código de arriba se muestra una forma de crear un "Array" capaz de contener veinte"TEdit": lo mismo podría contener "TImage", como puedes suponer. También se muestra en el código de arribacómo pueden crearse "TEdit" y se van añadiendo en una variable de tipo "TObjectList" (te remito a la ayuda deDelphi sobre esta clase).

Bueno. Pues lo mismo que se declaró una variable "Array" y una variable "TObjectList" en las clásulas"interface", "implementation", dentro de la clase "TForm2" y dentro de un método de esta última clase, nada teimpide declarar variables de esas características dentro de la declaración de tu propia clase, de la que estésllevando a cabo.

No sé. Intuyo que tanto a ti y a mí nos hacen falta un par de hervores en cuanto a programación orientada aobjetos se refiere, entre otras, porque ya puestos, porqué no. Ya me dirás qué sacas en claro de todo esterollo que he soltado. __________________David Esperaltawww.davidesperalta.com

23­04­2006

[Lepe] Miembro Premium

Registrado: May 2003Posts: 7.364

Despues de la extensa, eXtupenda y amena explicación de Dec, solo me queda añadir que Yo usaría unTObjectList por comodidad (no tienes que establecer los límites ni modificarlos al añadir objetos, se hace solo,además permite ordenar los objetos y sobre todo destruirlos de una forma muy facil; todos de una sola tacada obien destruir uno solo) y tambien porque queda un código más limpio.

Tambien te remito a la Búsqueda de los foros en donde se ha hablado mucho sobre los TObjectList.

Código Delphi [­]

var L:TobjectList; i:Integer;begin L := TobjectList.Create(true); // al destruir la lista se destruyen todos for i:=0 to 2000 do begin L.Add(Tedit.Create(Self); // lo creo y lo añado a la lista Tedit(L.items[i]).Parent := self ; accedo al objeto a través de la lista. Sin usar variables end; Sleep(3000); Freeandnil(L); // libero la lista y todos los Edits de una tacada.end;

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

Page 7: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 7/9

#7 24­04­2006

Alcolea Miembro

Registrado: Apr 2006Ubicación: Santiago de Cuba, CubaPosts: 100

Las clases y los objetos en Delphi

Hola a atodos:

Me entusiasma el tema y voy a meter mi cuchareta. Te recomiendo encarecidamente que leas "La Cara ocultade Delphi 4" a partir de la página 127 donde comienza a explicar todo lo relacionado con la POO, o sea, lacreación de clases, las relaciones que existen entre unas y otras a través de la herencia y todo un conjunto decuestiones que es preciso dominar para enredarse con el tema de manera apropiada.

Como ya alguien te explicó las clases las pudieras ver como "moldes" que definen el comportamiento de todoslos objetos que se instansien de ella, puedes ver a todos los botones de tu aplicación como "variables"pertenecientes al tipo TButton.

Un ejemplo sencillo:

Una clase para manejar empleados (esto lo vi en un libroy lo modifiqué, no está completo pero te ayudará)

TEmpleado = Class;privateNombre : String; Cargo : String;FechaIng : Date;Salario : Real;

En la sección private he declarado los atributos de la clase, algo así como las propiedades que caracterizaríana cada empleado, si piensas hacer una clase para manejar gráficos quizás debas declarar como uno de losatributos de esta un objeto Canvas. Todo lo que se declare en la sección private no podrá ser accedido desdeotra Unit, a no ser a través de algún método de la clase destinado al efecto

publicconstructor CreaEmpleado(ANombre, ACargo : String; AFechaIng : Date; Salario : Real);

El constructor, como te explicaron es un "método especial" que hace lo que ya te dijeron, y que puede habervarios dentro de una clase ya que un objeto puede crearse de varias formas, digamos que puedes cargarlodesde los datos guardados en el disco duro o crearlo desde cero en tiempo de ejecución, o puedes noimplementar un constructor si no es necesario ya que todas las clases tiene uno predefinido llamado create elcual inicializa todos los valores ,de la clase que sea que estés creando, desde cero, es decir, si es un valorlógico comienza como false; si es entero, en cero; una enumeración, por el primer valor de la enumeración;una string, con la cadena vacía; etc.

procedure SetNombre(ANombre : String);procedure SetNombre(ACargo : String);procedure EliminarEmpleado;procedure CalcularAumento;

end;

Además del constructor tendrás que declarar los métodos de tu clase, y esto una de las cosas que marca ladiferencia entre un registro y un objeto, los objetos llevan encapsulados dentro de si las funciones que hacen,quiero decir que donde quiera que lo llames le puedes aplicar al empleado que sea el método para calcular elaumento de la misma manera que al objeto Edit1 le aplicas el método Clear para borrar el texto (Edit1.Clear) (Empleado1.Calcular Aumento ) , no sabemos que líneas de código tiene el método Clear pero funciona, despuésque hagas tu clase no te acordarás que fue lo que pusiste a cada método pero si la hiciste bien no te hará faltarecordarlo, solo lamas el método y ya está

implementation

Page 8: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 8/9

Acá en la implementación es donde se pone a cada método declarado el código ejecutable que tendrá.Observa que delante del nombre de cada método se pone el nombre de la clase a la que pertenece, pues siimplementas mas de una clase en la Unit no indicar a que clase pertenece el método puede traer problemaspor lo que esto es obligatorio

procedure TEmpleado.SetNombre(ANombre : String);beginNombre := ANombreend;

procedure TEmpleado.SetNombre(ACargo : String);beginCargo := ACargoend;

////////////////////////////////////////////////////////////////////

¿Cómo utilizar la clase?... de la misma manera que utilizas las clases que ya existen, declarar los objetosinstancias de la clase de las variadas maneras que ya te explicaron y no olvidar llamar a alguno de losconstructores posibles para darle vida a los objetos, solo después de creados podrás aplicar algunos de losmétodos.

Espero que te pueda servir de algo mi explicación

Mi correo [email protected]

« Tema Anterior | Próximo Tema »

Normas de Publicación

no Puedes crear nuevos temasno Puedes responder a temasno Puedes adjuntar archivosno Puedes editar tus mensajes

El código vB está habilitadoLas caritas están habilitadoCódigo [IMG] está habilitadoCódigo HTML está deshabilitado

Saltar a Foro Varios Ir

Temas Similares

Tema Autor Foro Respuestas Último mensaje

Clases derivadas kolo toure Varios 3 01­12­2004 22:43:31

Clases e Interfaces Virata OOP 14 07­09­2004 11:10:15

Clases de transacciones. mlara Firebird e Interbase 3 16­07­2003 01:50:31

Clases Forms lafirma OOP 9 01­07­2003 20:48:12

Clases de Orgasmo Omar Alejandro Humor 0 05­05­2003 21:52:12

La franja horaria es GMT +2. Ahora son las 02:42:48.

­­ Español 3.6.7 Contactar con Nosotros ­ Club Delphi ­ Archivo ­ Top

Page 9: Crear Clases en Delphi - Foros Club Delphi

28/10/2015 crear clases en delphi ­ Foros Club Delphi

http://www.clubdelphi.com/foros/showthread.php?t=30889 9/9

Powered by vBulletin® Version 3.6.8Copyright ©2000 ­ 2015, Jelsoft Enterprises Ltd.

Traducción al castellano por el equipo de moderadores del Club DelphiInicio | Contacto | Foros | Noticias | Trabajo

Copyright 1996­2007 Club Delphi