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


11. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS II.
11.4. REFERENCIAS DE CLASE.
11. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS II.
11.4. REFERENCIAS DE CLASE.
11. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS II.
11.4. REFERENCIAS DE CLASE.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Referencias de clase.

Una referencia de clase es un tipo de dato que definimos para que se pueda crear una variable, que permita guardar una clase en dicha variable, es decir la dirección de memoria de dicha clase. Una de las cualidades de esta característica es que nos permite crear objetos a partir de la clase que se guarde en una variable.

Veamos un ejemplo simple, suponiendo que hemos creado la clase TClaseA, entonces podemos definir una referencia de clase, del siguiente modo:

Type
  TClaseAClass=Class of TClaseA;

Ahora declaramos dos variables una que será un objeto y la otra una clase.

Var
  ClaseAClass:TClaseAClass;
  ObjetoA:TClaseA

Luego asignamos la clase y creamos el objeto:

ClaseAClass:=TClaseA
ObjetoA:=ClaseAClass.create

Como podemos observar en ves de usar TClaseA.create hemos usado la variable que almacena la clase, y no la clase misma para hacerlo.

Las Referencias de clase no serían útiles si estos no hacen uso de la misma compatibilidad entre objetos. Cuando creamos una variable que es una referencia de clase como ClaseAClass, podemos asignarle a esta variable cualquier clase que sea descendiente de la clase TClaseA. Es decir si TClaseB es descendiente de TClaseA, entonces esto también es valido:

ClaseAClass:=TClaseB

Freepascal declara varias referencias de clase en sus librerias, como son: TClass y ExceptionClass, que son referencias de clase de las clases Tclass y Exception. Y se declaran de la siguiente manera:

TClass = Class of TObject;
ExceptClass=Class of Exception;

El tipo de referencia de clase TClass, se puede usar para almacenar cualquier clase escrita en freepascal, ya que toda clase es descendiente de TObject. Explicado todo lo anterior observemos ahora el siguiente programa:


Descargar
{$codepage utf8}
{$mode objfpc}
Uses Numeros,Complejos,Reales;
Var   
   Ref:TClassNumero; 
   cad:string;
   num1,num2:TNumero;
   rpt:char;
Begin  
  
  Writeln('Ingrese con que numeros quiere Multiplicar:');
  Writeln('[1] Complejos');
  Writeln('[2] Reales');
  Readln(rpt);
  Case rpt of
    '1': Ref:=TComplejo; 
    '2': Ref:=TReal;
  End;   
    
  Write('Ingrese el primer numero ');readln(cad);
  //Se tiene que usar el constructor del padre
  num1:=Ref.create; 
  num1.PonCad(cad);
  
  Write('Ingrese el segundo numero ');readln(cad);
  //Se tiene que usar el constructor del padre
  num2:=Ref.create; 
  num2.PonCad(cad);

  num1.Multiplicacion(num2);
  Writeln(num1.ObtCad(3))
End.
Código fuente 16: Ejemplo del uso de referencias de clase.
Descargar

En este programa hacemos uso de las classes TNumero, TComplejos y TReal, visto en los capítulos anteriores, lo primero que se puede observar es la variable Ref:TClassNumero, en donde TClassNumero es un referencia de clase de la Clase TNumero.

El programa pide al usuario sobre que numero se hará la multiplicación, si se hará con un numero Complejo o Real, y haciendo uso de la referencia de clases, se escoge que clases usar para crear los números y realizar la operación.

Algo importante es que si la variable almacena la clase TComplejo, esto no significa que podamos usar los métodos y atributos que tiene esta clase, sólo se pueden usar los métodos y atributos de la clase padre, que en este caso es TNumero. Es decir hacer esto no es posible.

Num1:=Ref.crear(0,0);

y el compilador generará un error indicandonos que el método crear no es miembro de la clase a la que se hace referencia. La unidades y el programa de ejemplo de este capitulo se pueden descargar desde este enalce: 11-04-Ejemplo.zip




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.