Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Introdução ao Polimorfismo | Visão Geral do Polimorfismo
C++ Poo
course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Introdução ao Polimorfismo

Note
Definição

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

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
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

main.cpp

copy
1234567891011
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.

question mark

Qual é o significado literal do termo polimorfismo?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

course content

Conteúdo do Curso

C++ Poo

C++ Poo

1. Fundamentos de POO em C++
2. Construtores e Destrutores
3. Visão Geral do Encapsulamento
4. Visão Geral de Herança
5. Visão Geral do Polimorfismo

book
Introdução ao Polimorfismo

Note
Definição

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

UploadButton.h

ResetButton.h

ResetButton.h

CancelButton.h

CancelButton.h

copy
1234
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

main.cpp

copy
1234567891011
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.

question mark

Qual é o significado literal do termo polimorfismo?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 5. Capítulo 1
some-alt