Titulo.jpg (10742 bytes)
FlechaI.jpg (2886 bytes) casa.jpg (31539 bytes) FlechaD.jpg (2791 bytes)

Clases abstractas


Una clase abstracta es una clase que no se puede utilizar para crear objetos, pero que sirve para que de ella hereden otras clases.

Sin embargo, si bien la clase abstracta no puede generar objetos, sirve para que objetos creados de clases diferentes, todas herederas de ella, puedan ser pasados como parametros, tomado como tipo de dato la clase abstracta.

Funciones virtuales puras

La clase abstracta puede tener funciones y datos perfectamente definidos pero siempre tendr� que tener al menos una funci�n virtual pura. Una funci�n virtual pura es una funci�n de la cual s�lo tenemos su definici�n, tipo de dato que devuelve, nombre y par�metros, pero no sabemos como estar� estructurada.

Las clases que deriven de una clase abstracta tienen que volver a declarar como virtual pura la funci�n o darle su instrumentaci�n.

Un buen ejemplo de clase abstracta es una clase que calcula el cero de una funci�n. En este caso nosotros necesitaremos tener una funci�n bien instrumentada que es la que nos c�lcula el cero de la funci�n, y declaramos una funci�n virtual pura que no tiene ninguna instrumentaci�n sino que ser� en cada momento instrumentada por la clase heredera seg�n lo que necesitamos en cada caso. En nuestro ejemplo para calcula los ceros de la funci�n seno.

class Ceros
{private :double xi;
double xf;
float paso;
float error;
public: Ceros (double xip,double xfp)
                {xi = xip;
xf = xfp;
paso = fabs(xfp-xip)/2.0;
error = 1e-15;
}
float Calcula();
float virtual Funcion (double x)=0;
};
float Ceros :: Calcula()
{ double x,y,y1;
  x = xi + paso;
  y1 = Funcion(xi);
  y = Funcion(x);
  for ( ;fabs(y) > error;) //aqui fijamos el error para el calculo del cero
    {paso /=2;
     if (y1*y>0 )
      {if (xi>x)
       { x-=paso;
         y1 = y;  
       }
       else
       { x+=paso;
         y1 = y;
       }
      }
     else
      {if (xi>x)
       {x+=paso;
       }
       else
        {x-=paso;
        }
      }
     y = Funcion(x);
    }
  return (x);
}

La funci�n Calcula va a analizar el comportamiento de los valores resultantes de aplicar Funcion a los valores que se le van pasando como parametro. Funcion es una funcion virtual pura, esto es solo sabemos que devuelve un valor flotante y se le pasa un solo parametro.

En estas condiciones de la clase Ceros no se pueden crear objetos pero si se puede hacer una clase que herede de ella e instrumente Funcion.

As� tenemos por ejemplo la clase CerosSeno que aparece a continuaci�n.

class CerosSeno : public Ceros
{ public : CerosSeno(double xip,double xfp) : Ceros (xip,xfp)
            { }
float virtual Funcion(double x)
{ return (sin(x));
}
};

Como se ve en ella simplemente situamos dentro de Funcion la funci�n a la que queremos hallarle los ceros.

El programa que utiliza estas clases puede ser como el que aparece a continuaci�n.

void main()
{ double x1 = Pi/10.0;
  double xf = Pi+Pi/10.0;
  CerosSeno Seno(x1,xf);
  clrscr();
  printf ("El cero de la funcion esta en: %.4f",Seno.Calcula());
  getch();
}

La clase CerosSeno si puede generar objetos puesto que instrument� la funci�n virtual que ten�a su antecesora. Para hallar los seros simplemente tendremos que llamar desde el objeto que creemos a la funci�n Calcula() e imprimir sus resultados.

arriba.jpg (2978 bytes) casa.jpg (31539 bytes)
Hosted by www.Geocities.ws

1