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 17-11-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Métodos de clase.

¿ Es posible llamar a un método de clase dentro de la misma clase que lo define ?.

Saludos.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #2  
Antiguo 17-11-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jplj
¿ Es posible llamar a un método de clase dentro de la misma clase que lo define ?.
En la ayuda de Delphi aparece lo siguiente:

A class method can be called through a class reference or an object reference. When it is called through an object reference, the class of the object becomes the value of Self.

Por lo tanto, entiendo que sí se puede llamar desde una instancia de una clase (la misma que lo define). Otra cosa es, para qué puedes necesitar una cosa así que no me lo imagino, pero poder creo que se puede.
No lo he probado nunca, sólo es una apreciacióonm de lo que leo en la ayuda, para estar 100% seguro habría que intentarlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 17-11-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
¿Para qué lo quiero hacer?: para hacer una ¿"chapuza"?.

Pretendo poder llamar a los métodos de clase desde diveros puntos de la apliación sin necesidad de instanciar la clase, pero resulta que en la propia clase es necesario el método que se define como método de clase.

Lo adecuado, creo, sería llevar la función que defino como método de clase a otra unit, para poder compartila. Pero quería probar este enfoque.

Saludos.
Juan P.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #4  
Antiguo 17-11-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Crea un método A (de clase) y otro B; El método de clase A lo único que debe tener dentro es la llamada a B; Para llamarlo desde Dentro puedes utilizar B, para llamarlo desde fuera puedes utilizar A; De todas maneras no acabo de verlo claro... tal vez estoy "espesito" hoy .
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 17-11-2004
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Cita:
Empezado por jplj
¿Para qué lo quiero hacer?: para hacer una ¿"chapuza"?.
Bueno, no es algo tan raro, sino más bien normal, no creo que estés haciendo ninguna chapuza por ello

Cita:
Empezado por jplj
Pretendo poder llamar a los métodos de clase desde diveros puntos de la apliación sin necesidad de instanciar la clase
Ésa es la principal ventaja y finalidad de dichos métodos, la no necesidad de tener creada una instancia.

Cita:
Empezado por jplj
..., pero resulta que en la propia clase es necesario el método que se define como método de clase.
Tengo clases y componentes donde esta práctica es habitual. Lo prohibitivo es llamar a métodos no de clase desde un método de clase, o el uso de variables internas a la clase, pues ello requeriría necesariamente que dichas variables existieran en memoria (tener creada una instancia de la misma) lo cual choca con su razón de ser.

Cita:
Empezado por jplj
Lo adecuado, creo, sería llevar la función que defino como método de clase a otra unit, para poder compartila. Pero quería probar este enfoque.
No entiendo esto, un método de clase, como cualquier método, se supone que es parte integrante de una clase y le pertenece por algo, no veo que haya que crear una "función suelta" para ello. Aunque depende de lo que quieras hacer exactamente, pero eso seguramente es otro tema ...

Saludos.
__________________
Guía de Estilo
Responder Con Cita
  #6  
Antiguo 17-11-2004
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Cita:
Empezado por andres1569
Lo prohibitivo es llamar a métodos no de clase desde un método de clase, o el uso de variables internas a la clase, pues ello requeriría necesariamente que dichas variables existieran en memoria (tener creada una instancia de la misma) lo cual choca con su razón de ser.
Luego entiendo que lo que dice Neftali no es correcto ?

Cita:
Empezado por Neftali
Crea un método A (de clase) y otro B; El método de clase A lo único que debe tener dentro es la llamada a B; Para llamarlo desde Dentro puedes utilizar B, para llamarlo desde fuera puedes utilizar A; ...
Cita:
Empezado por andres1569
No entiendo esto, un método de clase, como cualquier método, se supone que es parte integrante de una clase y le pertenece por algo, no veo que haya que crear una "función suelta" para ello. Aunque depende de lo que quieras hacer exactamente, pero eso seguramente es otro tema ...
Es otro tema ... , en el que por cierto me he metido yo solito (por leer cosas que no debo).
Así es que si no me funciona lo dejo como está y andando.

Saludos.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #7  
Antiguo 17-11-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.298
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No acabo de entender qué significa ésta frase:
"...Lo prohibitivo es llamar a métodos no de clase desde un método de clase"

Se puede llamar desde un método definido como class (método de clase) a otros metodos de la misma clase (public o published -incluso privates y protected, aunque no sea recoimendable-) que no estén definidos como métodos de clase (con class); Eso no tiene ningun problema; Revisa el siguiente código:

NOTA: Corresponde a un formulario que utiliza un método de clase para crear e inicializarse.

Código Delphi [-]
unit Unit2_classMethod;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm2 = class(TForm)
  private
    procedure LeerDisco;
    { Private declarations }
  public
    { Public declarations }
    procedure Inicializar;
  published
    class procedure Crear();
  end;
var
  Form2: TForm2;
implementation
{$R *.dfm}
{ TForm2 }
class procedure TForm2.Crear;
var
  F:TForm2;
begin
  // Crear el objeto
  F := TForm2.Create(nil);
  // Bloque de proteccion
  try
    // Llamar a "Método no de clase"
    F.Inicializar;
    // Llamar a "Método no de clase" que además está PRIVATE; 
    // Lo permite porque está en la misma Unit 
    // (entiendo que no se debería utilizar)
    F.LeerDisco;
    // show 
    F.ShowModal;
  finally
    F.Free;
  end;
end;
 
procedure TForm2.LeerDisco();
begin
  MessageDlg('Leyendo de disco...', mtInformation, [mbOK], 0);
end;

procedure TForm2.Inicializar();
begin
  MessageDlg('Inicializando...', mtInformation, [mbOK], 0);
end;
end.

Para llamarlo utilizarías:

Código Delphi [-]
  TForm2.Crear();

...tal vez no he entendido bien la cuestión, si es así pido discupas;

P.D: A ésto me refería con crear un método de clase que llama a otros métodos no de clase, de forma que desde fuera se puede llamar a Crear, y desde dentro se puede llamar a Inicializar y LeerDisco.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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


La franja horaria es GMT +2. Ahora son las 23:00:04.


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