15.13. Resumen

El polimorfismo - implementado en C++ con las funciones virtuales - significa «formas diferentes». En la programación orientada a objetos, se tiene la misma cara (la interfaz común en la clase base) y diferentes formas que usan esa cara: las diferentes versiones de las funciones virtuales.

Se ha visto en este capítulo que es imposible entender, o incluso 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 sí ocurre, por ejemplo, con const o con la sentencia switch), sino que funciona únicamente de forma conjunta, como una parte de una «visión de conjunto» de relaciones entre clases. A menudo la gente se confunde con otras características de C++ no orientadas a objetos, como la sobrecarga y los argumentos por defecto, que a veces se presentan como orientadas a objetos. No se deje engañar; si no hay ligadura dinámica, no hay polimorfismo.

Para usar el polimorfismo - y por lo tanto, técnicas orientadas a objetos - de forma eficaz en los programas hay que ampliar la visión de la programación para incluir no sólo los miembros y mensajes de una clase individual, sino también lo que tienen en común las clases y las relaciones entre ellas. Aunque requiere un esfuerzo significativo, merece la pena, porque se consigue mayor velocidad en el desarrollo, mejor organización de código, programas extensibles, y mayor facilidad de mantenimiento.

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 gestión de excepciones (cubierta en el Volumen 2). Estas características proporcionan un incremento de la potencia de programación comparable al de cada una de las características de la orientación a objetos: tipado abstracto de datos, herencia, y polimorfismo.