Aula 4.4: Herança e Polimorfismo #LTCode

COMPARTILHAR:

Aula 4.4 - Entenda herança e polimorfismo na programação orientada a objeto

Este artigo faz parte do projeto #LTCode


Herança e polimorfismo são dois conceitos que utilizamos em POO para melhorar projetos de estruturas de programas. Então vamos continuar com nossa série de aulas, clique aqui caso não tenha lido as aulas anteriores.

Herança:

A ideia é simples, ao invés de definir todas as classes de maneira completa e independente, primeiro definimos uma classe que contém tudo o que outras (duas ou mais) classes tem em comum. Confira herança na prática pelo diagrama de classes abaixo:


Imagem diagrama de classes reino animal - fonte: http://www.cafw.ufsm.br/~bruno/disciplinas/poo/exercicios/lista2.html
Como pode observar na imagem acima, dizemos que Ave e Mamífero herdam da classe Animal os atributos (private nome, protected classe) e métodos (imprime(), getNome(), falar()). Dizer isso é o mesmo que dizer que Ave e Mamífero estende (extends) a classe Animal.

Assim, uma classe é superclasse quando ela é estendida (extends) por outra classe, e que uma classe é filha (ou subclasse) quando ela estende (extends), herda de outra classe todos campos (atributos) e métodos. Sendo assim, uma subclasse é uma especialização de uma superclasse.

Polimorfismo:

O polimorfismo permite escrever programas que processam objetos que compartilham a mesma superclasse em uma hierarquia de classes como se todas fossem objetos da superclasse. Usando o diagrama de classe da imagem acima, a classe "Animal" pode ser classificada como classe abstrata, ou seja, nela não é possível instanciar objetos, assim as classes que herdam os métodos de "Animal" são chamadas de classes concretas, e estas podem ser instanciadas.

Vamos compreender melhor herança e polimorfismo realizando a atividade abaixo.

Atividade: Sistema de Pagamento

Uma empresa paga seus funcionários mensalmente. Os funcionários são de quatro tipos:


  • Funcionários assalariados – que recebem salários fixos quando não ultrapassam 40 horas por semana. Quando isso ocorre, recebem o salário, mais as horas-extras trabalhadas;
  • Funcionários que trabalham por hora (terceirizados) – são pagos por hora trabalhada;
  • Funcionários comissionados – recebem 6% sobre suas vendas;
  • Funcionários assalariados/comissionados – recebem um salário-base mais uma porcentagem sobre suas vendas – 6%.
Para o período salarial atual, a empresa decidiu recompensar os funcionários assalariados/comissionados adicionando 10% aos seus salários-base. Além de calcular os vencimentos que devem ser pagos a cada funcionário, a empresa deve calcular o valor a ser pago para cada uma de suas várias faturas (contas de mercadorias adquiridas, contas de luz, etc). Estas contas são de dois tipos:
  • Títulos – cujo valor será acrescido de 10% de multa quando pagas após o vencimento
  • Contas de concessionárias (contas de água, luz, gás, telefone) – cujo valor de pagamento não sofre alterações, ainda que realizado após o vencimento.
A empresa quer implantar um aplicativo de contabilidade em Java que realiza os cálculos de contas a pagar polimorficamente e que exiba uma relação dos valores a serem pagos por funcionário e por conta e um resumo com o total de valores a serem pagos no mês. Embora sejam situações diferentes – funcionários e faturas – é sabido que ambos constituem valores que compõem o valor total de custos da empresa por mês.

Obs.:
  1. O valor do salário base é de R$ 954,00.
  2. Para cada hora-extra trabalhada, o funcionário deverá receber R$ 8,00.
O diagrama de classe da atividade acima é o seguinte:



Ignoraremos por enquanto as classes "ControlePagamento" e "SistemaPagamentoTeste". Antes de prosseguir preciso esclarecer o que é <<interface>> na classe "Pagavel".

Interfaces são semelhantes a classes, sendo que suas definições de métodos não incluem corpo. Todos os métodos de uma interface são abstrato. Mais a frente você verá que para uma classe ser abstrata é necessário o uso da palavra chave "abstract" mas seu uso não é necessário em uma interface. Note que interfaces não contém construtores, apenas campos constantes (public, static e final) são permitidos. Uma classe pode herdar de uma interface da mesma forma que ela herda de uma outra classe qualquer.

O diagrama de classe acima informa que a interface "Pagavel" possui um método abstrato chamado "getValorAPagar()", este método será herdado pelas subclasses. Sendo assim, nossa interface "Pagavel" ficou assim:


Agora vamos desenvolver a classe "Empregado", clique sobre a imagem para ampliar se achar necessário.

A classe "Empregado" será uma classe abstrata, pois ela vai abstrair tudo o que cada tipo de empregado tem em comum em uma única classe, como por exemplo: nome, sobrenome, número de identificação.

Para que seja possível herdar os métodos de uma interface, devemos implementar a interface na classe "Empregado", por isso na linha 3 usamos o comando "... implements Pagavel", ou seja, até as classes que herdarem "Empregado" terão acesso ao método "getValorAPagar()".

Entre a linha 14 e 24 foi criados métodos getters, não foi necessário o uso de métodos setters pois no construtor da linha 8 que vamos realizar as atribuições nos campos.

Na linha 27 foi criado um método para imprimir as informações do empregado presente na classe "Empregado".

Agora vamos desenvolver a classe "Comissionado", clique sobre a imagem abaixo para ampliar.



Essa classe vai herdar a classe "Empregado", portanto devemos utilizar a palavra chave "... extends Empregado". Feito isso, no construtor preenchemos o nome, sobrenome e número de identificação do empregado comissionado chamando o construtor da superclasse "Empregado" usando a palavra chave super().

Na linha 15 sobrescrevemos o método "getValorAPagar()", por isso da expressão "@Override" com a nossa lógica desenvolvida dentro da classe "Comissionado".

Por fim a classe AssalariadoComissionado herda a classe Comissionado como ilustra a imagem abaixo:



Na linha 19 o método getValorAPagar é sobrescrito.

Vamos finalizar a aula aqui, espero que tenha compreendido herança e polimorfismo!

>> Próxima aula, clique aqui.

COMENTÁRIOS

Nome

#ann,24,#HK,19,#LTCode,70,Artigo - Diversos,158,Artigo - Games,196,Artigo - Tecnologia,530,autor-thomaz,7,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,58,Curiosidades - Diversos,49,Curiosidades - Tecnologia,50,en,2,HN,12,Raspberry Pi,9,root,70,Shorty Awards,1,Smartphones - Reviews,33,Top Nostalgia,2,VPN,17,WhatsApp,44,
ltr
item
Limon Tec: Aula 4.4: Herança e Polimorfismo #LTCode
Aula 4.4: Herança e Polimorfismo #LTCode
Aula 4.4 - Entenda herança e polimorfismo na programação orientada a objeto
https://1.bp.blogspot.com/-Vv6C0DkQgY0/WG_EGTY1EhI/AAAAAAAAFcs/qphwk8Z4UdkFSQu0zbS5xoZ_9_KovVlJACLcB/s640/ltcode.jpg
https://1.bp.blogspot.com/-Vv6C0DkQgY0/WG_EGTY1EhI/AAAAAAAAFcs/qphwk8Z4UdkFSQu0zbS5xoZ_9_KovVlJACLcB/s72-c/ltcode.jpg
Limon Tec
https://www.limontec.com/2019/04/aula-4-4-poo-java-ltcode.html
https://www.limontec.com/
https://www.limontec.com/
https://www.limontec.com/2019/04/aula-4-4-poo-java-ltcode.html
false
2157924926610706248
UTF-8
Carregar todos posts Não encontramos nenhum post VER TUDO Ler mais Responder Cancelar resposta Deletar Por Home PÁGINAS POSTS Ver tudo RECOMENDADO PARA VOCÊ LABEL ARQUIVO SEARCH TODOS POSTS Não encontramos nenhum post relacionado a sua requisição VOLTAR PÁGINA INICIAL Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sab Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez apenas agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir ESTE CONTEÚDO ESTÁ BLOQUEADO PASSO 1: Compartilhe com seus amigos PASSO 2: Clique no link compartilhado Copiar Todo Código Selecionar Todo Código Todos códigos foram copiados para seu clipboard Não é possível copiar códigos / textos, por favor aperte [CTRL]+[C] (ou CMD+C no Mac) para copiar Tabela de conteúdo