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:
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:
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.
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:
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.
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.
Top comments (0)