Polimorfismo
Enviado por vanesaBA • 22 de Abril de 2014 • 603 Palabras (3 Páginas) • 268 Visitas
El Polimorfismo (implementado en C++ con funciones virtuales) es la tercera característica esencial de un lenguaje orientado a objetos, después de la abstracción de datos y la herencia.
De hecho, nos provee de otra dimensión para la separación entre interfaz y la implementación, desacoplando el qué del cómo. El Polimorfismo permite mejorar la organización del código y su legibilidad así como la creación de programas extensibles que pueden "crecer" no sólo durante el desarrollo del proyecto, si no también cuando se deseen nuevas características.
La encapsulación crea nuevos tipos de datos combinando características y comportamientos. El control de acceso separa la interfaz de la implementación haciendo privados (private) los detalles. Estos tipos de organización son fácilmente entendibles por cualquiera que venga de la programación procedimental. Pero las funciones virtuales tratan de desunir en términos de tipos.
Llegamos ahora a los conceptos más sutiles de la programación orientada a objetos.
La virtualización de funciones y clases nos permite implementar una de las propiedades más potentes de POO: el polimorfismo.
#include <iostream>
using namespace std;
class ClaseA {
public:
ClaseA() : datoA(10) {}
int LeerA() const { return datoA; }
void Mostrar() {
cout << "a = " << datoA << endl; // (1)
}
protected:
int datoA;
};
class ClaseB : public ClaseA {
public:
ClaseB() : datoB(20) {}
int LeerB() const { return datoB; }
void Mostrar() {
cout << "a = " << datoA << ", b = "
<< datoB << endl; // (2)
}
protected:
int datoB;
};
int main() {
ClaseB objeto;
objeto.Mostrar();
objeto.ClaseA::Mostrar();
return 0;
}
La salida de este programa es:
a = 10, b = 20
a = 10
Decimos que la definición de la función "Mostrar" en la ClaseB (1) oculta la definición previa de la función en la ClaseA (2)………
El ejemplo anterior demuestra algunas de las posibilidades del polimorfismo, pero tal vez sería mucho más interesante que cuando se invoque a una función que se superpone en la clase derivada, se llame a ésta última función, la de la clase derivada.
En nuestro ejemplo, podemos preferir que al llamar a la función "VerNombre" se ejecute la versión de la clase derivada en lugar de la de la clase base.
Esto se consigue mediante el uso de funciones virtuales. Cuando en una clase declaramos una función como virtual, y la superponemos en alguna clase derivada, al invocarla usando un puntero
...