Curso de PHP Orientado a Objetos – Parte 4

Slide1Quarto artigo do curso de PHP Orientado a Objetos. Dessa vez explicaremos de forma detalhada o que é e quando usamos o Polimorfismo.
Este é o quarto artigo do curso de PHP Orientado a Objetos.
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:


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:



Agora vamos testar o exemplo:



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.


14 Responses to Curso de PHP Orientado a Objetos – Parte 4

  1. webdascoisas disse:

    Show demais este curso! Parabéns.

  2. Lucas Barbosa disse:

    Show de bola.
    Só tenho uma dúvida, nao estou conseguindo usar os metodos das classes quando estou em outro arquivo php..
    Tipo tenho 3 arquivos php, Cheque,ChequeEspecial e index, quando chamo pelo index as outras classes da erro? poderia me auxiliar como fazer isso no php? Obrigado!!

    • rafael moura disse:

      Olha amigo, primeiro, depende de como vc salvou os seus arquivos, aconselho, em se tratando de classes, que vc salve seu arquivos assim: nomedoarquivo.class.php…..agora salvando assim(aconselhável), no index vc faz a inclusão destes arquivos logo no topo assim : require_once ‘nomedoarquivo.class.php’……instancia o objeto e acessa suas funções, existe a questão de se trabalhar com uma função chamada autoload que é muitooo mesmo prático e naõ precisa ficar dando inlcude ou require toda hora mas isso é outra questão

  3. Ótima explicação, estava tentando entender com clareza polimorfismo e outras ladainhas de POO mais agora tá de boa! Obrigado cara!

  4. Mário Marques disse:

    Lucas Barbosa não sei se a tua dúvida chegaste a conseguir tirar mas penso que o te falta é isto

    require_once(“Cheque.class.php”);
    require_once(“ChequeEspecial.class.php”);

    Ou seja no arquivo index.php tens de fazer o require_once para chamar os arquivos onde tens as classes.

    • Wanderson disse:

      Amigo… provávelmente o Arquivo index.php provávelmente esta fora da pasta classes…. ai fica
      classes/ChequesEspeciais.class.php

      • rafael moura disse:

        ainda tem esta questão tbm que nosso amigo ai tem que se atentar, se o index dele estiver em outra pasta tem que saber incluir os arquivos de maneira ordenada cada um em seu quadrado

  5. Paulo Sérgio disse:

    Muito bom!
    Porém tenho duvidas, nesse exemplo gostaria de saber se mesmo as classes distintas se é um exemplo de sobrecarga de metodo? (se não me engano em Java conseguimos fazer isso em uma mesma classe, [claro usando os parametros para diferenciar qual metodo queremos usar] já no PHP não conseguimos fazer na mesma classe pois o mesmo não é tipado) é isso ou estou enganado?

  6. Edson Alves disse:

    Exelente curso!!!
    Só fiquei com uma duvida nesta aula, se eu tiver uma varialvel ‘conta’ declarada como null e essa dependendo da execução poder assumir objetos diferentes(ContaCorrente ou ContaSalario), um por vez claro, mais variando de execução para execução isso caracteriza polimorfimos???

    • rafael moura disse:

      Olha Edson não entendi muito bem sua pergunta, mas polimorfísmo trata de questão de classes ou métodos com o mesmo nome mas ações diferentes, variável é outra coisa, desculpa se não compreendi o que vc quiz dizer, se for variável vc pode sim criar diferentes

  7. Denison disse:

    Estou com a mesma dúvida que o Lucas, tenho 3 arquivos com o mesmo nome do dele quando chamo da erro.
    Obs: os tres arquivos estão no mesmo diretório.

  8. Denison disse:

    Consegui achar o erro, não sei pq, se alguem souber me fale, troquei require_once por um include e rodo certinho

Deixe uma resposta para testando Cancelar resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *