DEV Community

Mateus Nere
Mateus Nere

Posted on

Polimorfismo: Um exemplo prático

MOTIVAÇÃO

Sempre tive a intenção de escrever posts a respeito de programação e venho procrastinando essa atividade há bastante tempo. Como primeiro post, escolhi tentar organizar um pensamento que sempre tive dificuldade de explicar quando me perguntavam, o polimorfismo. Antes disso vou dar uma breve introdução a respeito dos pilares da programação orientada a objetos e depois adentrarei nos exemplos práticos.

UM BREVE RESUMO SOBRE OS PILARES DA PROGRAMAÇÃO ORIENTADA A OBJETOS

A POO é um dos paradigmas de programação existentes (temos outros como esses aqui) e que é bastante utilizado ao redor do mundo no desenvolvimento de aplicações. Ela tem o intuito de abstrair coisas do mundo real e representá-las em forma de objetos de acordo com o contexto do que queremos fazer.

A programação orientada a objetos é baseada em 4 pilares fundamentais que são:

  • Abstração: envolve a capacidade de pegar um problema que queremos resolver e abstrair suas características essenciais e ignorar os detalhes irrelevantes para o contexto para identificarmos os objetos desse problema.
  • Encapsulamento: esse conceito se refere à possibilidade de podermos proteger os detalhes internos de um objeto que criamos fazendo com que possamos alterar a visibilidade desses componentes de acordo com a necessidade do problema, fazendo com que as informações dos atributos e métodos só possam ser acessadas por quem realmente pode acessar.
  • Herança: esse pilar consiste em poder reaproveitar atributos e métodos (sobrescrevendo esses métodos quando necessário) de uma classe "pai" nas classes filhas (subclasses).
  • Polimorfismo: para mim, esse é o conceito mais complicado da orientação a objetos. O polimorfismo permite que possamos tratar objetos de diferentes classes da mesma forma forma desde que implementem uma interface em comum ou que extendam da mesma classe pai. Isso permite que diferentes tipos de objetos respondam de maneira similar a chamadas de métodos.

EXEMPLO PRÁTICO DE POLIMORFISMO

POLIMORFISMO UTILIZANDO HERANÇA

Vamos imaginar o contexto de uma escola e que a remuneração dos professores varia de acordo com a matéria.

Temos a classe “pai” Professor:

Java Class Professor

Agora temos as classes de professores: ProfessorHistoria, ProfessorMatematica e ProfessorQuimica. Cada um desses professores possui um cálculo de remuneração diferente como podemos observar nas imagens abaixo:

Java Class Professor Historia

Java Class Professor Matematica

Java Class Professor Quimica

Com isso criado, temos abaixo o método main onde instanciamos 3 objetos diferentes (1 para cada tipo de professor). No print das informações, chamei o método calculaRemuneracao e ele irá se comportar de maneira semelhante mesmo sendo de 3 lugares diferentes. Coloquei todos os professores com o mesmo valor hora e com a mesma quantidade de horas trabalhadas para que possamos ver a diferença no resultado da remuneração de cada um, uma vez que cada tipo de professor tem um cálculo de remuneração diferente.

Java Class Main

Esse é um exemplo prático de como podemos aproveitar o polimorfismo quando possuímos uma relação de herança na hierarquia das classes.

POLIMORFISMO UTILIZANDO INTERFACES

Nesse caso, vamos imaginar um cenário parecido mas agora temos uma empresa que possui os seguintes funcionários: Professor, Monitor e Coordenador. Cada um desses funcionários possui atributos diferentes mas para todos eles precisamos calcular o valor da sua remuneração mensal. Portanto, nesse caso implementei a interface Financeiro que possui o método calculaRemuneracaoMensal e em cada uma das classes (Professor, Monitor e Coordenador) fiz a implementação desse método de acordo com forma de remuneração de cada um. Abaixo segue o código das 3 classes e da interface Financeiro para poderem observar:

Java Class Monitor

Java Class Professor

Java Class Coordenador

Java Interface Financeiro

Isso posto, podemos observar na classe Main, o método printaSalarioFuncionario espera uma instancia da interface Financeiro e não uma classe específica de Monitor, Professor ou outra. Assim podemos passar na chamada desse método qualquer classe que implemente a interface Financeiro fazendo com que possamos nos aproveitar do que o polimorfismo nos oferece.

Java Class Main

Com esses exemplos acima consegui organizar esse conceito na minha cabeça e espero que quem dê uma lida e esteja precisando consiga ser ajudado também.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay