Contenido del Curso
POO en C++
POO en C++
Introducción al Polimorfismo
Polimorfismo es un concepto fundamental. Derivado del griego que significa "muchas formas", permite que objetos de diferentes classes
sean tratados como un objeto de una superclase común. El aspecto más significativo es la capacidad de diferentes entidades para responder de manera propia al mismo mensaje o llamada de método.
Tipos de polimorfismo
Existen dos tipos principales de polimorfismo: en tiempo de compilación (estático) y en tiempo de ejecución (dinámico). Comprender cómo y cuándo utilizar cada uno es fundamental para escribir código flexible y eficiente.
Polimorfismo en tiempo de compilación: ocurre mediante la sobrecarga de funciones u operadores, donde el método a ejecutar se determina en tiempo de compilación.
Polimorfismo en tiempo de ejecución: utiliza funciones virtuales, permitiendo que las clases derivadas sobrescriban los métodos de la clase base, eligiendo el método correcto en tiempo de ejecución.
Aplicación y necesidad del polimorfismo
Una excelente manera de comprender el polimorfismo es mediante una analogía del mundo real. Considere una interfaz gráfica de usuario con un botón. Este botón puede comportarse de manera diferente según el contexto: puede funcionar como un botón de carga, un botón de reinicio o un botón de cancelar.
Cada botón ejecuta una acción distinta al ser pulsado, pero todos ellos funcionan esencialmente como botones. Observa la implementación teórica de este concepto.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Considerando que todos los botones comparten el mismo método onClick()
con diferentes implementaciones, profundicemos más. ¿Qué sucede si necesitamos una función que acepte un objeto perteneciente a una de las classes
de botón como parámetro?
main.cpp
void user_clicked_upload_button(const UploadButton& btn) { btn.onClick(); } void user_clicked_reset_button(const ResetButton& btn) { btn.onClick(); } void user_clicked_cancel_button(const CancelButton& btn) { btn.onClick(); }
Como puedes ver, crear manualmente funciones separadas para cada botón puede generar complejidad, especialmente durante las modificaciones, ya que cada función debe ser editada individualmente si surgen problemas. Además, en la función principal, serán necesarias comprobaciones adicionales para determinar qué función llamar. La polimorfismo permite resolver fácilmente estos problemas.
¡Gracias por tus comentarios!