Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   El mejor momento para liberar un objeto (https://www.clubdelphi.com/foros/showthread.php?t=87262)

ecfisa 07-12-2014 01:51:53

Hola roman.
Cita:

Empezado por roman (Mensaje 486202)
Claro Mario, pero a lo que nos referimos dec y yo es a que en el ejemplo que puso, ecfisa olvidó poner class en la declaración de los métodos. Sirve si no se hace referencia a variables de la clase pero no es lo que "debe" hacerse.

No tenemos nada en contra de los métodos de clase :)

// Saludos

:) En realidad no fué un olvido, quise poner en relieve precisamente la curiosidad que Delphi permite utilizar "métodos de objeto" sin haber creado una instancia de la clase.

Saludos :)

BDWONG 07-12-2014 02:31:02

ecfisa haber si entendi entoces un metodo de clase es una referencia encambio un metodo de objeto seria como llamar directamente a un metodo enconcreto

y por ultimo tu recomiendas el uso de alguno de los dos o dependiendo la ocacion ves si los utilizas

ecfisa 07-12-2014 04:23:50

Hola BDWONG

Los métodos de clase se accionan sobre una referencia de clase y los métodos de objeto sobre una instancia de la clase, te pongo un código que ejemplifica a ambos:
Código Delphi [-]
...
type
  TForm2 = class(TForm)
  private
  public
    class procedure Mostrar(const aCaption: string); // método de clase
    procedure foo;                                   // método de objeto (o instancia)
  end;

var
  Form2: TForm2;

implementation

class procedure TForm2.Mostrar(const aCaption: string);
begin
  if not Assigned(Form2) then
    Form2:= TForm2.Create(nil);
  Form2.Caption:= aCaption;
  Form2.Show;
end;

procedure TForm2.foo;
var
  x: Integer;
begin
  x:= 5 + 4;
  ShowMessage(IntToStr(x));
end;

Llamada ejemplo:
Código Delphi [-]
...
procedure TForm1.Button1Click(Sender: TObject);
begin
  TForm2.Mostrar('Un título'); // método de clase, se invoca desde la clase
  Form2.foo;                   // método de objeto, se invoca desde la instancia(objeto)   
end;
También te podría interesar ampliar con estos artículos:
Saludos :)

Ñuño Martínez 07-12-2014 14:50:41

Cita:

Empezado por mamcx (Mensaje 486200)
No hay razon para decir que es "anormal" usar class methods. La idea de que solo es OO si se usan clases/objetos es solo un subproducto de que desafortunadamente la OO que se hizo popular es la deficiente implementación de C++/Java.

Totalmente de acuerdo. De hecho, hay muy pocos lenguajes que, siendo absolutamente estrictos en la definición, sean orientados a objetos (Small-Talk y poco más).

Por cierto (aunque sé que llego tarde...), hay un método que usamos mucho sin crear el objeto: El método Create. ;)

Al González 08-12-2014 05:35:09

Sí Ñuño, el constructor Create, y con la misma frecuencia el método de clase NewInstance. ;)

roman 10-12-2014 21:48:47

Cita:

Empezado por ecfisa (Mensaje 486215)
:) En realidad no fué un olvido, quise poner en relieve precisamente la curiosidad que Delphi permite utilizar "métodos de objeto" sin haber creado una instancia de la clase.

De todas formas, no es lo correcto. Y los despistados, lean bien el hilo para saber que lo que se discute no es si los métodos de clase son buenos o no ;)

// Saludos

Eason 25-12-2014 07:05:42

Si,los class methods se usan regularmente de la forma exacta que se describe.


La franja horaria es GMT +2. Ahora son las 22:19: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