Para conhecer as demais partes clique aqui.
Ao final deste artigo, você será capaz de:
- Entender e aplicar o conceito do polimorfismo
Polimorfismo
Polimorfismo é sempre um gargalo no ensino da POO. Sei, pela dificuldade que meus alunos encontram ao tentar compreender este conceito através de livros ou manuais que, em sua maioria, contemplam exemplos complexos com uma linguagem confusa ou técnica de mais.
Tentarei expor neste artigo, o conceito e a aplicabilidade do polimorfismo em sua forma mais simples, evitando o over engineering sobre o assunto.
O polimorfismo significa muitas formas ou algo que pode mudar sua forma. Em termos de programação, polimorfismo pode ser entendido como um único nome de classe ou métodos que represente um código diferente.
Lembre-se: mesmo nome, porém código diferente.
Vantagens:
- O polimorfismo facilita a reutilização de código.
- Facilita a manutenção, visto que não é preciso utilizar várias estruturas condicionais para simular situações diferentes.
Para entender, vamos utilizar o clássico exemplo do banco, que tem 2 tipos de cheques: Cheque Comum e o Cheque Especial.
Ambos os cheques possuem a mesma estrutura, porém um cobra 20% de juros (comum) e o outro cobra 10 % (especial).
Vamos modelar inicialmente a classe Cheque:
class Cheque{
public $Valor;
/* Método Construtor
* Recebe o parâmetro $Valor.
*/
function __construct($Valor){
$this->Valor = $Valor;
}
/* Método CalcularJuros()
* Calcula os Juros, neste caso 20%
*/
function CalcularJuros(){
return $this->Valor * 1.20;
}
/* Método TipoCheque()
* Retorna o tipo do Cheque
*/
function TipoCheque(){
return "Comum";
}
}
Estrutura básica, caso você tenha dúvidas com relação ao código, consulte as aulas anteriores.Agora vamos modelar a classe ChequeEspecial, que vai herdar a classe Cheque:
/* Perceba a herança acontecendo
* definida pela palavra extends
*/
class ChequeEspecial extends Cheque{
/* Método CalcularJuros() - Opa!! Mas esse método já não tinha sido
* implementado na classe anterior? Sim, está aí o polimorfismo.
* O juros do Cheque especial é 10%, não 20 como o anterior
*/
function CalcularJuros(){
//Perceba que herdamos a propriedade Valor da classe pai
return $this->Valor * 1.10;
}
/* Método TipoCheque() - Também Sobrescrito
* uso explicito do polimorfismo
*/
function TipoCheque(){
return "Especial";
}
}
Agora vamos testar o exemplo:
//Incluimos as duas classes
require_once("Cheque.class.php");
require_once("ChequeEspecial.class.php");
// Criação dos cheques
$Cheques[1] = new Cheque(380.00);
$Cheques[2] = new ChequeEspecial(600.00);
$Cheques[3] = new Cheque(230.00);
// Percorrendo os Cheques
foreach ( $Cheques as $key => $Cheque )
{
echo "Cheque $key ( {$Cheque->TipoCheque()} )
com juros: R$ {$Cheque->CalcularJuros()} <br /> ";
}
Temos ai um exemplo claro do polimorfismo, onde ChequeEspecial herdou todas as características da classe cheque, entretanto o que difere as duas classes é a ocorrência do polimorfismo nos métodos TipoCheque() e CalculaJuros().
Perceba que a classe ChequeEspecial sobrescreveu o método CalcularJuros da classe-pai e mudou seu comportamento. O método calcular juros nos dois tipos de cheque é igual, o que difere é o comportamento deles.
É importante notar também que a classe ChequeEspecial herdou o método construtor da classe-pai, para setar o atributo $Valor.
No foreach estamos apenas percorrendo o Array de objetos.
Terminamos assim mais um conteúdo do curso. No próximo artigo falaremos sobre Classes Abstratas, Classes Finais, Métodos Abstratos e Métodos Finais.
Utilize o espaço de comentários para tirar suas dúvidas.
Show demais este curso! Parabéns.
ResponderExcluir