09. PHP Orientado a Objetos – Conceitos: Polimorfismo
09. PHP Orientado a Objetos – Conceitos: Polimorfismo

Apresentação

Introdução

Neste artigo, estaduremos o conceito de polimorfismo em classes. É um assunto bem tranquilo, então imagino que não haverá dificuldades neste assunto. O significado da palavra polimorfismo é várias formas, ou que admite várias formas. Tal significado no paradigma orientado a objetos, tem-se que um método herdado de uma classe admite várias formas na classe-filha.

Polimorfismo

Como dito, a palavra polimorfismo tem significado várias formas e tal conceito aplicado na programação orientada a objemtos determina que um mesmo método de uma classe-mãe, quando herdada por classes-filhas, admite formas diferentes.

# Exemplo 1

Imaginemos que estamos desenvolvendo um sistema de e-commerce (loja virtual) e que a empresa que venderá seus produtos por meio deste sistema vende tanto no próprio país como exporta seus produtos a outros países. Como desenvolvedores, poderíamos criar uma classe que manipula os produtos, denominada Product. Como existe a possibilidade de o cliente não ser aqui do Brasil, podendo ser dos Estados Unidos, por exemplo, seria bastante interessante que houvesse a opção de compra com valores de dólares. Ou, para um cliente argentino, ter a opção de preços em pesos argentinos. Bom, perceba que a única diferença entre tais clientes seria a moeda utilizada; outros métodos da classe Product, como adicionar ao carrinho de compras, comprar, visualizar, etc. podem ser os mesmos. Então, criaremos classes-filhas, que herdarão a class-mãe Product, e manipularemos apenas a moeda utilizada.

Criando a nossa classe-mãe Product que trabalha com a moeda Real:

1
2
3
4
5
6
7
8
9
10
11
class Product {
   
   public $price;
   
   ...
   
   public function getPrice() {
      return $this->price;
   }
   
}

Originalmente, nossa classe Product trabalha com o valor real, pois, sendo a empresa brasileira e a classe não fazendo nenhuma conversão de moeda, o retorno do método getPrice será um valor em real.

Agora, para manipularmos o preço para outras moedas, criaremos nossas classes filhas: ProductReal, que manipulará em Real, ProductDolar, manipulando em Dólar, e ProductPeso, manipulando em Pesos Argentinos.

Como originalmente nossa classe-mãe trabalha com o real, não precisamos fazer a conversão na classe ProductReal.

1
2
3
4
5
6
7
8
class ProductReal extends Product {

   // Sobrescrevendo o método getPrice
   public function getPrice(){
      return parent::getPrice();
   }

}

Para trabalharmos com a moeda Dólar, teremos de fazer a conversão. Neste momento, a cotação do dólar comercial está em R$ 1,88. Então, para convertermos, basta dividir nosso preço em Real por 1.88:

1
2
3
4
5
6
7
8
class ProductDolar extends Product {

   // Sobrescrevendo o método getPrice
   public function getPrice(){
     return parent::getPrice() / (1.88);
   }

}

Ou seja, ao multiplicarmos o valor em Real por 1.77, teremos o preço do produto em dólar. Para o Peso Argentino, é o mesmo processo. Neste momento, a cotação está em R$ 0,45.

1
2
3
4
5
6
7
8
class ProductPeso {

   // Sobrescrevendo o método getPrice
   public function getPrice() {
      return (0.45) * parent::getPrice();
   }

}

Assim, teremos três classes diferentes, herdando os métodos de uma mesma classe, mas manipulando-os de uma forma diferente.

Tendo o sistema pronto, bastaríanos configurar para que, se o cliente fosse brasileiro, instanciasse a classe ProductReal, se fosse estadunidense, intanciasse a classe ProductDolar, e se fosse argentino, instanciasse a classe ProductPeso; e, assim, teríamos a mesma manipulação do produto, porém, utilizando três moedas diferentes.

Conclusão

Como podem ver, o conceito de polimorfismo entre classes é bem tranquilo de entender e muito útil e várias situações. De acordo com o conceito, um método de uma classe poderá ser manipulado em suas classes-filhas de maneiras diferentes, de acordo com a finalidade de cada classe-filha. Este processo evita que o programador tenha de criar, no nosso caso, três classes diferentes, com os mesmos métodos, para cada moeda. Mas podem estar se perguntando: mas tivemos de criar quatros classes, não é pior? A resposta é: não. Imagine se você, criando as três classes diferentes, tivesse de alterar o código de um método em comum, como o visualizar produto; teria de alterá-lo nas três classes. Neste processo, necessitaria alterar apenas na classe-mãe.

02 de setembro de 2010
Categoria(s): PHP
Faça sua parte, divulgue o Post !!
  • Twitter
  • Google Buzz
  • Digg
  • Delicious
  • Stumbleupon
  • Technorati
  • Reddit
  • Facebook
  • LinkedIn
  • E-mail
Você pode gostar de ver:
Sobre o Autor
Anderson Woss
Trabalhei no mercado WEB durante 2 anos exercendo funções de administrador de empresa especializada em TI, programador de sistemas e designer. Sou apaixonado por programação, estudando, como hobbie, várias linguagens, como PHP, Java, C/C++ e Python. Atualmente curso Engenharia Eletrônica na Universidade Tecnológica Federal do Paraná, onde participo de um projeto de desenvolvimento de sistemas para domótica, e presto serviços direcionados a WEB como freelancer.
Exibir Pingbacks/Trackbacks
Comentários (7)
Exibir Comentários
Pingbacks/Trackbacks (0)
  • Rodrigo Luis disse:

    Olá Anderson, parabéns por mais um excelente post, é muito bom termos pessoas com conhecimento e qualidade participando aqui do webARTz com materiais tão importantes.
    Parabéns !!!

    quinta-feira, 02 de setembro de 2010 às 8:25
  • Carlos disse:

    Nossa, muito bom mesmo!
    É a primeira vez que vejo algo tão completo assim na net, ta muito dificil ainda sair da programação procedural mas com esses artigos acredito que será desta vez…rs
    Parabéns
    Ah, enquanto não vem os outros artigos voce tem uma sugestão de leitura sobre o assunto?
    Até!

    quarta-feira, 22 de setembro de 2010 às 12:21
  • Daniel disse:

    Anderson, valeu pela força! Os atigos estão muito bem explicados.
    Sua codificação é bem padronizada.
    O que facilita e muito a compreenção.

    Só me tira uma duvida:
    No caso da conversão monetaria, corrija-me se eu estiver errado, o correto não seria DIVIDIR o valor em Real pelo valor das outras moedas?
    Porque se 1 Dolar equivale a 1,77 Real, 100 Dolares seriam equivalentes a 177 Reais e não o contrario.

    Mas o conceito da programação ficou claro, isso que importa.
    Fico muito grato!
    Ótimo trabalho.

    sexta-feira, 25 de março de 2011 às 19:31
  • Dalton Menezes disse:

    Muito bom o seu tutorial. Achar um bom material a respeito de POO é difícil, ainda mais com exemplos práticos; mas consegui entender o que muitos acabam tornando nebuloso. Obrigado!

    sábado, 13 de agosto de 2011 às 5:40
  • Alessandro disse:

    Cara..post precioso…raridade.

    quinta-feira, 08 de setembro de 2011 às 14:55
  • Fábio Garbini disse:

    Ótimo post, porém, a única coisa que está ‘errada’ é o calculo dolar->real, igual disseram nos comentários, o correto seria dividir o valor em real pela cotação atual do dolar. por ex:

    R$ 10,00 em U$

    10.0 / 1.74 = 5.74 aprox.

    de resto, perfeito! ótimo post.

    Vlw!

    quarta-feira, 16 de novembro de 2011 às 12:55
  • Mario disse:

    Cara você não sabe o galho que me quebrou…obrigado de verdade.

    sábado, 26 de novembro de 2011 às 11:25
  • Este post não possui Pingbacks/Trackbacks

Escreva um Comentário

Blog webARTz: Onde a WEB encontra a ARTE

2008~2012 Blog webARTz // Powered by Wordpress // Hospedado na KingHost // Desenvolvido por: Agência BBD
Fechar
Voltar ao Topo
Atenção !!
Nosso blog passou por grandes mudanças e melhorias na estrutura, recursos e conteúdo.

Estas alterações podem causar dificuldade na navegação, por este motivo alguns bugs e/ou problemas podem ocorrer. Caso isso ocorra pedimos que você nos notifique pelo "Fale Conosco" aqui do blog.

No momento estamos trabalhando para o perfeito funcionamento
do blog.

Obrigado !!
Fechar
Abrir Aviso