
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.



















Grátis: API de CEPs para qualquer Linguagem
CodeIgniter e Zend – Frameworks PHP
PHP: Script para Cálculo de Frete dos Correios (Atualizado)
08. PHP Orientado a Objetos – Conceitos: Herança



