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.3. MÉTODOS ABSTRACTOS.
11. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS II.
11.3. MÉTODOS ABSTRACTOS.
11. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS II.
11.3. MÉTODOS ABSTRACTOS.

SIGUIENTE

SIGUIENTE

SIGUIENTE


‒ Métodos Abstractos.

La abstracción es una característica de la programación orientada a objetos, que nos permite crear clases, en donde se considera lo más relevante y se ignora lo irrelevante.

Para la implementación de clases abstractas, free pascal nos ofrece el uso de métodos abstractos.

Un método abstracto es un método, que no tiene implementación y el código correspondiente se implementa, en la clase descendiente. Se conoce como una clase abstracta, aquella clase que tiene métodos abstractos, una clase puede tener métodos abstractos y métodos no abstractos. Generalmente no se deben crear objetos de las clases que tienen métodos abstractos, y sólo se deben crear objetos de las clases descendientes. No obstante el compilador permite crear objetos de clases abstractas, pero debemos tener presente que no se podrán usar los métodos abstractos ya que estos no están implementados. Una clase abstracta es como una clase normal cualquiera, es decir puede tener también atributos y propiedades, constructores y destructores, que luego se usarán en la clase descendiente. Siguiendo con el ejemplo de los números complejos, se ha creado la siguiente clase TNumero:


Descargar
{$codepage utf8}
{$mode objfpc}
Unit Numeros;
Interface
Uses sysutils,math;
Type  
  TNumero = class 
    private
     ParteReal,ParteImag:double;
     Procedure PonComp(indice:integer;r:double);
     Function ObtComp(indice:integer):double;
    public
     decimales:integer;
   
     Function ObtCad(dec:integer=0):string;virtual;abstract;
     Function PonCad(n:string):integer;virtual;abstract;
 
     Procedure Adicion(n:TNumero);virtual;abstract;
     Procedure Sustracion(n:TNumero);virtual;abstract;
     Procedure Division(n:TNumero);virtual;abstract;
     Procedure Cuadrado(n:TNumero);virtual;abstract;
     Procedure Cuadrado;virtual;abstract;
     Function modulo:double;virtual;abstract;
     Function argumento:double;virtual;abstract;
     Procedure Potencia(n:integer);virtual;abstract;
     Procedure Multiplicacion(n:TNumero);virtual;abstract;

     Property Real:double index 1 read ObtComp write PonComp;
     Property Imag:double index 2 read ObtComp write PonComp;
  End;

Implementation 

   Procedure TNumero.PonComp(indice:integer;r:double);
     Begin
       if indice=1 then ParteReal:=r;
       if indice=2 then ParteImag:=r
     End;
 
    Function TNumero.ObtComp(indice:integer):double;	 
     Begin
       if indice=1 then ObtComp:=ParteReal;
       if indice=2 then ObtComp:=ParteImag
     End;
  
End.
Código fuente 14: Unidad Numeros.pp que contiene la clase TNumero.
Descargar

En la clase TNumero se implementa con métodos abstractos, las operaciones matemáticas que se pueden hacer con un número en general, como son la adición, la sustracción, la adición, la multiplicación, etc. Los métodos abstractos deben tener al final dos palabras reservadas virtual y abstract. Esto nos dice que todos los métodos abstractos deben ser siempre virtuales. Los métodos abstractos luego se implementan en las clases descendientes, que en este caso serán TComplejo y TReal. Los atributos ParteReal y ParteImag, se encuentran en la parte privada de la clase TNumero, estos atributos no son accesibles por las clases TComplejo y TReal. Y la única manera de acceder a ellos es a través de sus propiedades. Debido a eso el método PonCad, de la clase TComplejo necesita ser cambiado, para ello se necesitará de una variable nueva auxD, que se usará en el parámetro por referencia que usa el procedimiento Val, el valor devuelto en auxD, será después asignado a las propiedades Real y Imag. Se usa la variable auxD, porque no se pueden usar las propiedades con el parámetro por referencia del procedimiento Val. Entonces el nuevo método PonCad será el siguiente:


Descargar
Function TComplejo.PonCad(n:string):integer;
      Var aux:string;
          p,i,error:integer;
          PR,PI:string;
          encontro:boolean; 
          auxD:double;
      Begin
       aux:=n;
       Real:=0;
       Imag:=0;
       error:=0;
       if (aux[length(aux)]='i') and (Not(aux[length(aux)-1]in['0'..'9']))
           then aux:=Copy(aux,1,length(aux)-1)+'1i';
       if aux[length(aux)]='i' then
         Begin
           delete(aux,length(aux),1);
           if aux[length(aux)] in ['0'..'9']
              then Begin
                     i:=length(aux);
                     encontro:=false;
                     p:=0;
                     while (not encontro) and (i>1) do
                      Begin
                       if (aux[i]='+') or (aux[i]='-')
                         then Begin
                               encontro:=true;
                               p:=i
                              end;
                       i:=i-1
                      End;
                     PR:=Copy(aux,1,p-1);
                     delete(aux,1,p-1);
                     PI:=aux;
                     Val(PR,auxD,error);
                     Real:=auxD;
                     Val(PI,auxD,error);
                     Imag:=auxD;
                     if (error<>0)
                        then Begin
                              Real:=0;
                              Imag:=0;
                             End;
                   End;
         End
       else
        Begin
              Val(aux,auxD,error);
              Real:=auxD;
        End;
       PonCad:=error
      End;
Código fuente 15: Nuevo método PonCad de la clase TComplejos.
Descargar

Las unidades de este ejemplo junto con un programa de ejemplo, lo pueden descargar del siguiente enlace: 11-03-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.