Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola BDWONG
Cita:
Empezado por BDWONG Ver Mensaje
... yo no sabia que se podían utilizar métodos de una clase si previamente haber creado un objeto, si me di cuenta pero pensé que era error de mi delphi

La verdad que no me siento nada cómodo con esta característica siento que para este ejemplo que estoy haciendo sera mas conveniente utilizar una unit común y corriente ...
Estoy totalmente de acuerdo y disculpa si dí a entender que era mi consejo hacerlo de ese modo, no lo es en absoluto.

En este caso específico como comentas, no aporta beneficios. Mi intención era solo comentarte que si deseabas hacerlo, Delphi también lo permite.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 05-12-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Entonces, que me quede claro, ¿se pueden usar métodos de una clase sin instanciarla y sin que dichos métodos estén declarados como "de clase"?

Este Delphi...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 05-12-2014
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
Se puede pero no se debe...

Este ecfisa...



// Saludos
Responder Con Cita
  #4  
Antiguo 05-12-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Y porque no?


Los class methods se usan regularmente de la forma exacta que se describe, no solo en Delphi sino en todos los lenguajes que soportan esta opcion.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 05-12-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
David,

Cita:
Empezado por dec
...¿se pueden usar métodos de una clase sin instanciarla y sin que dichos métodos estén declarados como "de clase"?...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TC1 = Object
  public
    // Método y variable tipo Object
    MsgUser : String;
    function Calculate(N1, N2 : Double) : Double;
  end;

  TC2 = class
  public
    // Variable de Instancia
    MsgUser : String;
    // Método de Clase
    class function Calculate1(N1, N2 : Double) : Double;
    // Método de Instancia
    function Calculate2(N1, N2 : Double) : Double;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Método Object
function TC1.Calculate(N1, N2: Double): Double;
begin
   ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;

// Método de Clase
class function TC2.Calculate1(N1, N2: Double): Double;
begin
   ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;

// Método de Instancia
function TC2.Calculate2(N1, N2: Double): Double;
begin
   ShowMessage(Format('Calculate = %n (+,-,*,/) %n',[N1,N2]));
end;

// Uso del tipo Object y de Métodos de Clase y de Instancia
procedure TForm1.Button1Click(Sender: TObject);
var
   C1 : TC1;
   C2 : TC2;

begin

   C1.MsgUser := 'Tipo Object = No requiere ser Instanciado para el uso de Variables y Métodos';
   ShowMessage(C1.MsgUser);
   C1.Calculate(7.1,3.14);

   ShowMessage('Método de Clase = No requiere ser Instanciada la Clase para su uso');
   TC2.Calculate1(7.1,3.14);

   C2 := TC2.Create;
   C2.MsgUser := 'Método y Variable de Instancia = Requiere ser Instanciada la Clase para su uso';
   ShowMessage(C2.MsgUser);
   C2.Calculate2(7.1,3.14);
   C2.Free;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, ejemplifica el uso del tipo Object y de Métodos de Clase y de Instancia.

Nota: El tipo object permite instanciar objetos sin usar el método Create y es muy util para implementaciones de tipos abstractos simples, para desarrollos formales orientados a objetos se debe usar el tipo Class.

Revisa esta información:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 05-12-2014 a las 20:33:21.
Responder Con Cita
  #6  
Antiguo 05-12-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Agrego algo a lo expuesto por Nelson. El detalle es, que conviene abstenerse de incluir métodos virtuales cuando se usa el antiguo estilo Pascal de declaración,
Código Delphi [-]
type 
  xxx = object
    procedure yyy; virtual;
  end;
con las nuevas versiones de Delphi.

Eso trae aparejado problemas que ya han sido reportados en QualityCentral: Using old style Objects in D2009 fails

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 05-12-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Daniel,

Cita:
Empezado por ecfisa
...conviene abstenerse de incluir métodos virtuales cuando se usa el antiguo estilo Pascal...trae aparejado problemas que ya han sido reportados en QualityCentral...


Revisa este código:
Código Delphi [-]
 
  program testD2009;
  
  {$APPTYPE CONSOLE}
  
  uses
    SysUtils;
  
  Type
    PObject1 = ^TObject1;
    TObject1 = Object
      FCount     : Integer;
      Constructor Init;
      Procedure Add; virtual; { removing virtual allows the program to run }
      end;
  
  Type
    PObject2   = ^TObject2;
    TObject2   = Object(TObject1)
      Constructor Init;
      end;
  
  Constructor TObject1.Init;
  begin
  { Commenting out this assignment allows the program to run.
    It also runs if Procedure Add; is not Virtual.
    I presume there is some address mismatch resulting in an
    over-write of the VMT }
  FCount := 0;
  Writeln('TDynArray:Init');
  end;
  
  Procedure TObject1.Add;
  begin
  Writeln('Add');
  end;
  
  Constructor TObject2.Init;
  begin
  Inherited Init;
  Writeln('TObject2:Init');
  end;
  
  Var
    Object1 : PObject1;
    Object2 : PObject2;
  begin
    try
      Object1 := New(PObject1,Init);
      Object1^.Add;
  
      Object2 := New(PObject2,Init);
      Object2^.Add;
      readln;
    except
      on E:Exception do
        Writeln(E.Classname, ': ', E.Message);
    end;
  end.
Tomado de : QualityCentral-Using old style Objects in D2009 fails

El código anterior que falla en Delphi 2009 según se indica en QualityCentral, funciona correctamente en Delphi 2010 y Delphi XE6 sobre Windows x32 y Delphi XE7 sobre Windows 10 Technical Preview x32, al parecer el problema reportado solo aplica a Delphi 2009, no obstante para desarrollos formales orientados a objetos se debe usar el tipo Class.

Espero sea útil

Nelson.
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
Un momento, ¿no sería mejor comenzar con Python 3.x? Al González Python 4 05-04-2011 16:30:43
Liberar un objeto Com marcosl OOP 1 25-10-2007 00:10:19
Liberar el foco de un objeto Velia Varios 4 18-11-2005 01:08:08
Liberar un objeto xerkan Servers 1 28-10-2003 17:29:10


La franja horaria es GMT +2. Ahora son las 06:28:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi