BotonMenu
BotonIndice

Visita : conoce3000.com
Paypal : https://www.paypal.com/donate/?hosted_button_id=XY8TZ3MGN64GE

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL

PASCAL CON FREE PASCAL


12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.6. MÉTODOS BÁSICOS DE LA CLASE TOBJECT.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.6. MÉTODOS BÁSICOS DE LA CLASE TOBJECT.
12. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS III.
12.6. MÉTODOS BÁSICOS DE LA CLASE TOBJECT.

SIGUIENTE

SIGUIENTE

SIGUIENTE


La clase TObject es una superclase que heredan todas las clases por defecto en cualquier programa, no es necesario indicar que una clase herede de TObject todos los métodos que este contiene. En esta clase se encuentran los métodos antes vistos como: Create, Destroy, Free, etc.

En este capítulo sólo se explicarán algunos de los métodos de uso más común, dejando el resto para otros capítulos. A continuación algunos de los métodos de uso más común de la clase TObject :

‒ 1. AfterConstruction y BeforeDestruction.

Son dos métodos virtuales que pueden ser sobreescritos. AfterConstruction es un método que se ejecuta después de la creación de un objeto y BeforeDestruction antes de la destrucción de un objeto. Ejemplo:


Descargar
{$codepage utf8}
{$mode objfpc}
Type TMiClase=class
       Constructor Crear;
       Procedure AfterConstruction;override;
       Procedure BeforeDestruction;override;
       Destructor Destruir;
     End;
     
     Constructor TMiClase.Crear;
      Begin
        Writeln('Creando el Objeto')
      End;
     Procedure TMiClase.AfterConstruction;
      Begin
        Writeln('Despues de crear el objeto')
      End;
     
     Procedure TMiClase.BeforeDestruction;
      Begin
        Writeln('Antes de destruir el objeto')    
      End;
     
     Destructor TMiClase.Destruir;
      Begin
        Writeln('Destruyendo el Objeto')
      End;    
     
Var  MiClase01:TMiClase;
Begin
  MiClase01:=TMiClase.Crear;
  MiClase01.Destruir  
End.
Código fuente 16: Ejemplo de AfterConstruction y BeforeDestruction.
Descargar

‒ 2. ClassName y ClassNameIs.

Son dos métodos de clase, ClassName devuelve el nombre de una clase, y ClassNameIs devuelve verdadero si un objeto es de la clase que se pasa como cadena de caracteres en su parametro, en caso contrario devuelve falso.


Descargar
{$codepage utf8}
{$mode objfpc}

Type TMiClase=class
     End;

     TMiClase02=class(TMiClase)
     End;

Var  MiClase01:TMiClase;
     MiClase02:TMiClase02;
Begin
  MiClase01:=TMiClase.create;
  MiClase02:=TMiClase02.create;
  Writeln(MiClase01.classname);
  Writeln(MiClase01.ClassNameIs('TMiClase'));
  Writeln(MiClase01.ClassNameIs('TMiClase02'));
  Writeln(MiClase02.ClassNameIs('TMiClase02'));
End.
Código fuente 17: Ejemplo de ClassName y ClassNameIs.
Descargar

‒ 3. ClassParent.

Este método de clase, devuelve una referencia de clase de la clase padre de una Clase.


Descargar
{$codepage utf8}
{$mode objfpc}

Type TMiClase=class
     End;

     TMiClase02=class(TMiClase)
     End;

Var  MiClase01:TMiClase;
     MiClase02:TMiClase02;
     Ref: TClass;
Begin
  MiClase02:=TMiClase02.create;
  Writeln(MiClase02.ClassName);
  ref:=MiClase02.ClassParent;
  Writeln(ref.ClassName);
  ref:=ref.ClassParent;
  Writeln(ref.ClassName);
End.
Código fuente 18: Ejemplo de ClassParent.
Descargar

‒ 4. DefaultHandler y DefaultHandlerStr.

Estos métodos virtuales son ejecutados cuando el método Dispacth o DispacthStr, envia un mensaje que no esta implementado.


Descargar
{$codepage utf8}
{$mode objfpc}

Type
     TMsg=Record
       MSGID : Cardinal;
       Data : Pointer;
     End;

    TMiClase=class
       Procedure DefaultHandler(var M);override;
       Procedure Mensaje01(Var Msg:TMsg); Message 1;
       Procedure Mensaje02(Var Msg); Message 2;
     End;

     TMiClase02=class(TMiClase)
     End;

     Procedure TMiClase.Mensaje01(Var Msg:TMsg);
       Begin
         Writeln('Mensaje01')
       End;

     Procedure TMiClase.Mensaje02(Var Msg);
       Begin
         Writeln('Mensaje02')
       End;

     Procedure TMiClase.DefaultHandler(var M);
      Begin
        Writeln('Cuando se despacha un mensaje que no existe este método se ejecuta')
      End;

Var  MiClase01:TMiClase;
     MiClase02:TMiClase02;
     mensaje:TMsg;
Begin
  MiClase02:=TMiClase02.create;
  mensaje.Msgid:=9;
  mensaje.Data:=nil;
  MiClase02.Dispatch(mensaje);
  mensaje.Msgid:=1;
  mensaje.Data:=nil;
  MiClase02.Dispatch(mensaje);
End.
Código fuente 19: Ejemplo de DefaultHandler y DefaultHandlerStr.
Descargar

‒ 5. Equals.

Este método virtual, devuelve verdadero si un objeto es creado con la misma clase del otro Objeto que se compara.


Descargar
{$codepage utf8}
{$mode objfpc}
Type TMiClase=class
     End;
     
     TMiClase02=class(TMiClase)
     End;
     
Var  MiClase01:TMiClase;     
     MiClase02:TMiClase02;  
     x:TMiClase;
Begin
  MiClase01:=TMiClase.create;
  MiClase02:=TMiClase02.create;
  Writeln(MiClase01.Equals(MiClase02));
  x:=MiClase01;
  Writeln(MiClase01.Equals(x))
End.
Código fuente 20: Ejemplo de Equals.
Descargar

‒ 6. NewInstance, FreeInstance, InitInstance.

NewInstance es un método de clase virtual, que permite crear una nueva instancia y devuelve un TObject. FreeInstance es un método virtual que destruye la instancia u objeto creado con NewInstance. InitInstance es un método de clase que inicializa los atributos a 0 y la tabla de métodos virtuales. Estos métodos son usados internamente por Create y Destroy, respectivamente. Estos métodos son usados internamente por el Constructor de una clase, su uso es muy particular y sólo se usa cuando queramos crear constructores muy personalizados.


Descargar
{$codepage utf8}
{$mode objfpc}
Type
   TClase01=class
     a:integer;
   End;
Var A,B:TClase01;   

Begin
  TObject(A):=TClase01.NewInstance;
  A.a:=5;
  Writeln(A.a);
  A.InitInstance(A);
  Writeln(A.a);
  A.FreeInstance;
  B:=TClase01.Create;
  B.a:=5;
  Writeln(B.a);
  B.destroy  
End.
Código fuente 21: Ejemplo de NewInstance, FreeInstance, InitInstance.
Descargar

‒ 6. GetHashCode.

Es un método virtual, diseñado para que se sobrescriba y devuelva un código Hash, si este no es sobrescrito devolverá la dirección de memoria del parámetro self.


Descargar
{$codepage utf8}
{$mode objfpc}
Type
   TClase01=class
     a:integer;
   End;
Var B:TClase01;
    p:longint;

Begin  
  B:=TClase01.Create;
  p:=B.GetHashCode;
  Writeln(p);
  B.destroy  
End.
Código fuente 22: Ejemplo de GetHashCode.
Descargar

‒ 8. InheritsFrom.

Método de clase que tiene el mismo comportamiento que el operador is, este método devuelve verdadero si el objeto es de una clase o un objeto de una de sus clases descendientes, en caso contrario devolverá falso.


Descargar
{$codepage utf8} 
{$mode objfpc} 
Uses sysutils; 
Type 
     TClassAvion=Class of TAvion; 
     TAvion=class 
       Procedure Despegar;virtual;abstract; 
     End; 
     TAvComercial=class(TAvion) 
       Procedure Despegar;override; 
       Procedure Publicidad; 
     End; 
     TAvCarga=class(TAvion) 
       Procedure Despegar;override; 
     End; 
     
     Procedure TAvComercial.Despegar; 
      Begin 
        Writeln('Despegando Avion Comercial'); 
      End;  
     Procedure TAvComercial.Publicidad; 
      Begin 
        Writeln('PUBLICIDAD:Vuela aqui y nunca te caeras') 
      End;  
     Procedure TAvCarga.Despegar; 
      Begin 
        Writeln('Despegando Avion Carga') 
      End; 

Var A:TAvion; 
    Ref:TClassAvion; 
    rpta:byte; 
Begin  
  ref:=TAvion; 
  Write('Que avion quieres usar [1] Comercial, [2] Carga : ');readln(rpta); 
  Case rpta of 
    1: ref:=TAvComercial; 
    2: ref:=TAvCarga;   
  End;  
  A:=Ref.create; 
  try 
    A.Despegar; 
    if A.InheritsFrom(TAvComercial) then TAvComercial(A).Publicidad 
                                 else Writeln('Este avion no tiene publicidad') 
  except 
    on EAbstractError do Writeln('No es posible despegar el avion escogido'); 
  end; 
End.
Código fuente 23: Ejemplo de InheritsFrom.
Descargar

‒ 9. InstanceSize.

Este método de clase Devuelve el tamaño en bytes de un objeto más los 4 bytes propios de uso interno de la propia clase. Si deseamos saber el tamaño total de los atributos en bytes de una instancia debemos restar los 4 bytes. Este método no devuelve los bytes adicionales que pueden ser utilizados al momento de crear un objeto o instancia.


Descargar
{$codepage utf8}
{$mode objfpc}
Type
   TClase01=class
     cad:string;
     a:integer;
     b:int64;
     procedure mostrar;
     procedure nada;
   End;

   procedure TClase01.mostrar;
    Begin
      Writeln('cad =',cad);
      Writeln('a = ',a);
      Writeln('b = ',b);
      Writeln('tam cad =',SizeOf(cad));
      Writeln('tam a =',SizeOf(a));
      Writeln('tam b =',SizeOf(b));
    End;

   procedure TClase01.nada;
    Begin

    End;

Var A:TClase01;

Begin
  A:=TClase01.create;
  A.cad:='Hola';
  A.a:=45;
  A.b:=56;
  A.mostrar;
  Writeln(A.InstanceSize-4);
  A.destroy
End.
Código fuente 24: Ejemplo de InstanceSize.
Descargar

‒ 10. ToString, UnitName.

ToString es un método virtual que permite devolver el nombre de la clase del cual se creó la instancia y UnitName devuelve el nombre de la unidad en donde se encuentra la clase en caso la clase este en un programa, este devuelve el nombre que se coloco con la palabra reservada program y si no se uso program este devuelve program. ToString es un método virtual que se suele sobrescribir, para devolver cadenas de caracteres más adecuados de los objetos descendientes.


Descargar
{$codepage utf8}
{$mode objfpc}
Program Objeto-16;
Type
   TClase01=class
     a:integer;
   End;
   
Var A:TClase01;    

Begin
  A:=TClase01.create;
  Writeln(A.ToString);
  Writeln(A.UnitName);
  A.destroy  
End.
Código fuente 25: Ejemplo de ToString, UnitName.
Descargar


Última revisión: 11/12/2013.



SIGUIENTE
SIGUIENTE
SIGUIENTE


 
‒ Comentarios y sugerencias.

Agradezco de antemano, todo comentario, sugerencia, y donativo a través de , que ayude a mejorar los contenidos educativos de Conoce 3000. Además, cualquier pregunta o duda que tengas lo puedes hacer por este medio. Pero, todo contenido que pueda resultar ofensivo, malicioso, racista, sexista, discriminatorio, obsceno, vulgar será eliminado. Para clases particulares contactame por whatsapp al 📲 (+51) 999 264 073








PORTADA |  INTERESANTE |  APUNTES |  LIBROS |  GALERIA


Creative Commons License


Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia : Creative Commons Reconocimiento-NoComercial 3.0 Unported License.