Polimorfismo - implementado en C++ con las funciones virtuales - significa "formas diferentes". En la programación orientada a objetos, se tiene la misma vista (la interfaz común en la clase base) y diferentes formas de usarla: las diferentes versiones de las funciones virtuales.
Se ha visto en este capítulo que es imposible entender, ni
siquiera crear, un ejemplo de polimorfismo sin usar la abstracción
de datos y la herencia. El polimorfismo es una característica que
no puede ser vista de forma aislada (como por ejemplo las
sentencias const
y switch
),
pero sin embargo funciona únicamente de forma conjunta, como una
parte de un "gran cuadro" de relaciones entre clases. La gente se
vuelve a menudo confusa con otras características no orientadas a
objetos de C++ como es la sobrecarga y los argumentos por defecto,
los cuales son presentados a veces como orientado a objetos. No
nos liemos; si no hay ligadura dinámica, no hay polimorfismo.
Para usar el polimorfismo - y por lo tanto, técnicas orientadas a objetos - en los programas hay que ampliar la visión de la programación para incluir no solo miembros y mensajes entre clases individuales, si no también sus puntos en común y las relaciones entre ellas. Aunque requiere un esfuerzo significativo, es recompensado gracias a que se consigue mayor velocidad en el desarrollo, mejor organización de código, programas extensibles, y mayor mantenibilidad.
El polimorfismo completa las características de orientación a objetos del lenguaje, pero hay dos características fundamentales más en C++: plantillas (introducidas en el capítulo 16 y cubiertas en mayor detalle en el segundo volumen de este libro), y manejo de excepciones (cubierto en el Volumen 2). Estas características nos proporcionan un incremento de poder de cada una de las características de la orientación a objetos: tipado abstracto de datos, herencia, y polimorfismo.