Conteúdo do Curso
C++ Poo
C++ Poo
Introdução ao Polimorfismo
Polimorfismo é um conceito fundamental. Derivado do grego, significando "muitas formas", permite que objetos de diferentes classes
sejam tratados como um objeto de uma superclasse comum. O aspecto mais significativo é a capacidade de diferentes entidades responderem de maneira própria à mesma mensagem ou chamada de método.
Tipos de Polimorfismo
Existem dois principais tipos de polimorfismo: em tempo de compilação (estático) e em tempo de execução (dinâmico). Compreender como e quando utilizar cada um é fundamental para escrever códigos flexíveis e eficientes.
Polimorfismo em tempo de compilação: ocorre por meio de sobrecarga de funções ou operadores, onde o método a ser executado é determinado em tempo de compilação.
Polimorfismo em tempo de execução: utiliza funções virtuais, permitindo que classes derivadas sobrescrevam métodos da classe base, com o método correto sendo escolhido em tempo de execução.
Aplicação e necessidade do polimorfismo
Uma excelente forma de compreender o polimorfismo é por meio de uma analogia do mundo real. Considere uma interface gráfica com um botão. Esse botão pode se comportar de maneiras diferentes dependendo do contexto—pode funcionar como um botão de upload, um botão de redefinir ou um botão de cancelar.
Cada botão executa uma ação distinta ao ser clicado, mas todos eles essencialmente funcionam como botões. Veja a implementação teórica deste conceito.
UploadButton.h
ResetButton.h
CancelButton.h
class UploadButton : public Button { public: void onClick() { std::cout << "Upload" << std::endl; } };
Considerando que todos os botões compartilham o mesmo método onClick()
com implementações diferentes, vamos nos aprofundar. E se precisarmos de uma função que aceite um objeto pertencente a uma das classes
de botão 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 você pode ver, criar manualmente funções separadas para cada botão pode gerar complexidade, especialmente durante modificações, pois cada função precisa ser editada individualmente caso surjam problemas. Além disso, na função principal, serão necessárias verificações adicionais para determinar qual função chamar. A polimorfismo permite resolver facilmente esses problemas.
Obrigado pelo seu feedback!