- Fundamentos de la programación orientada a objetos: Abstracción
- Fundamentos de la programación orientada a objetos: Encapsulación
- Fundamentos de la programación orientada a objetos: Herencia
- Fundamentos de la programación orientada a objetos: Polimorfismo
- Fundamentos de la programación orientada a objetos: Composición (diseño)
- Definición de clases
- Derechos de acceso
- Constructores: por defecto, paramétricos y de copia
- Destructores
- Autorreferencia: esto
- Herencia
- Creación dinámica de objetos: nuevo y suprimir
- Punteros
- Métodos virtuales (virtual y override)
- Miembros estáticos
- Tipos anidados, espacios de nombres y operador de contexto '::'
- Dividir definición y declaración de clase
- Clases abstractas e interfaces
- Sobrecarga de operadores
- Conversión de tipos de objeto: dynamic_cast y puntero void *
- Punteros, referencias y const
- Gestión de la herencia: final y delete
Fundamentos de la programación orientada a objetos: polimorfismo
El término polimorfismo significa variabilidad o diversidad. Es lo contrario de la abstracción combinada con el mecanismo de herencia. Cuando tenemos una interfaz de programación común, esta puede implementarse por medio de diferentes clases vinculadas por relaciones de herencia. Llamar a los métodos de la interfaz hará que la tarea se realice de diferentes maneras.
Por ejemplo, imagine una familia de vehículos abstractos que incluya un par de tipos determinados, como un coche y un helicóptero. Ambos ejecutarán igual de bien la orden de desplazarse del punto A al punto B, pero el coche lo hará por tierra y el helicóptero, por el aire.
Continuemos el ejemplo con el programa de dibujo. Podemos decir que la diversidad en ella se establece a nivel de formas gráficas. El usuario es libre de dibujar cualquier combinación de círculos, cuadrados y triángulos. Cada uno de estos objetos debe poder mostrarse en la pantalla utilizando sus propias coordenadas y su propio estilo, pero lo más importante es hacerlo de manera que produzca una forma adecuada.
Lo más probable es que el programa tenga un array (u otro contenedor) que almacene todas las formas creadas por el usuario, y mostrar todo el dibujo en la pantalla debería consistir en dibujar secuencialmente cada forma. Si reducimos las instrucciones de dibujo para las formas a un método separado (llamémoslo draw), entonces cada clase tendrá su propia implementación. Sin embargo, los encabezados de estas funciones serán completamente idénticas, ya que realizan la misma tarea y toman los datos iniciales de los objetos.
Por lo tanto, tenemos la oportunidad de unificar el código fuente, ya que la misma llamada a draw dentro del bucle sobre formas presenta polimorfismo: la forma mostrada dependerá del tipo de objeto.