Tutorial de POO no PHP: Herança e polimorfismo
Autor/fonte: Bruno Viana
Tags: [ tutorial poo ]
Como dito anteriormente, uma classe é uma estrutura básica para a criação de objetos. Sendo assim vários objetos podem ser criados seguindo a mesma estrutura, porém com dados diferentes.
Porém há casos em que é necessário ter objetos idênticos com algumas funcionalidades a mais ou então com as mesmas funcionalidades, mas com comportamentos diferentes.
1. Herança
Herança é a caracterista de um filho obter algumas características do pai. Na programação orientada a objetos isso também pode ocorrer.
Se prestarmos atenção um carro e uma moto possuem características bem parecidas. Ambos possuem rodas ou até mesmo marchas, que são características semelhantes de qualquer veículo. Sendo assim podemos dizer que carro é um veículo. Assim como uma moto também é um veículo. Portanto ambos – carro e moto – herdam características do objeto veículo.
Na programação uma herança é caracterizada pela palavra chave extends. Assim nosso exemplo seria codificado da seguinte forma:
2. Polimorfismo
Polimorfismo é um termo grego que significa muitas formas ( poli: muitas, morphos: formas). Na programação é o mesmo que dizer que várias classes podem possuir a mesma estrutura e comportamentos diferentes.
Ao utilizar herança não apenas podemos reutilizar métodos da classe pai, como também podemos sobrescrever os métodos da classe pai, fazendo assim com que algumas características sejam modificadas.
Vamos supor que um banco possui dois tipos de cheques: o Cheque Comum e o Cheque Especial. Ambos os cheques possuem a mesma estrutura, o que diferencia um do outro é a forma de cobrança de juros. O Cheque Comum cobra 25% em cima do valor, então a classe será assim:
O método calculaJuros() irá naturalmente retornar o valor que deverá ser cobrado do Cheque Comum com juros. O problema é que no Cheque Especial o valor dos juros cai para 10%. A classe seria algo como:
Assim reaproveitamos a estrutura dos objetos mudando apenas o que for preciso. Mas às vezes é preciso que mesmo sobrescrevendo um método, o código na classe pai seja executado. Para isso basta você chamar o nome do método, mudando onde tem $this para parent.
Porém há casos em que é necessário ter objetos idênticos com algumas funcionalidades a mais ou então com as mesmas funcionalidades, mas com comportamentos diferentes.
1. Herança
Herança é a caracterista de um filho obter algumas características do pai. Na programação orientada a objetos isso também pode ocorrer.
Se prestarmos atenção um carro e uma moto possuem características bem parecidas. Ambos possuem rodas ou até mesmo marchas, que são características semelhantes de qualquer veículo. Sendo assim podemos dizer que carro é um veículo. Assim como uma moto também é um veículo. Portanto ambos – carro e moto – herdam características do objeto veículo.
Na programação uma herança é caracterizada pela palavra chave extends. Assim nosso exemplo seria codificado da seguinte forma:
<?php
class Veiculo
{
public $marcha;
public $quantidadeRodas;
public function passarMarcha()
{
// código
}
public function andar()
{
// código
}
}
class Carro extends Veiculo
{
public function __construct()
{
$this->quantidadeRodas = 4;
}
}
$carro = new Carro();
$carro->andar();
?>
2. Polimorfismo
Polimorfismo é um termo grego que significa muitas formas ( poli: muitas, morphos: formas). Na programação é o mesmo que dizer que várias classes podem possuir a mesma estrutura e comportamentos diferentes.
Ao utilizar herança não apenas podemos reutilizar métodos da classe pai, como também podemos sobrescrever os métodos da classe pai, fazendo assim com que algumas características sejam modificadas.
Vamos supor que um banco possui dois tipos de cheques: o Cheque Comum e o Cheque Especial. Ambos os cheques possuem a mesma estrutura, o que diferencia um do outro é a forma de cobrança de juros. O Cheque Comum cobra 25% em cima do valor, então a classe será assim:
<?php
class ChequeComum
{
private $valor;
// ... outros métodos da classe
public function setValor( $valor )
{
$this->valor = $valor;
}
public function getValor()
{
return $this->valor;
}
public function calculaJuros()
{
return $this->valor * 1.25; // soma 25% em cima do valor
}
}
?>
O método calculaJuros() irá naturalmente retornar o valor que deverá ser cobrado do Cheque Comum com juros. O problema é que no Cheque Especial o valor dos juros cai para 10%. A classe seria algo como:
<?php
class ChequeEspecial extends ChequeComum
{
public function calculaJuros()
{
return $this->valor * 1.10; // soma 10% em cima do valor
}
}
?>
Assim reaproveitamos a estrutura dos objetos mudando apenas o que for preciso. Mas às vezes é preciso que mesmo sobrescrevendo um método, o código na classe pai seja executado. Para isso basta você chamar o nome do método, mudando onde tem $this para parent.

Enviado por xKuRt em 03/02/2009 às 08:40
Itens relacionados
Tutorial de POO no PHP: Abstração
Tutorial de POO no PHP: Membros da classe
Tutorial de POO no PHP: Programação Estruturada x Programação Orientada a Objetos
Tutorial de POO no PHP: Encapsulamento
Tutorial de POO no PHP: Classes e Objetos
Tutorial de POO no PHP: Tratamento de erros
Tutorial de POO no PHP: Intercepções
Tutorial de POO no PHP: Padrões de projetos
Avaliação
Avaliação desta publicação: 10.00; Total de avaliações: 1
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
| Enviado por BMCVET em 07/11/2009 às 12:09 Muito Bom Tuturial Parabens !!! -- BMCVET |
| Enviado por Stark em 08/04/2009 às 22:07 Olá, Como a sua serie de tutoriais POO no PHP começaram por explicar o que era a POO! Não seria bom nesta parte da herança incluir o significado de "public","protected" e "private". Explicar suas diferenças e aplicações? E obviamente os bons habitos à ter. Trata-se de uma sugestão! Abraços! -- W.B. |
Envio de comentário:
Quinta, 02 de Setembro de 2010
Área restrita
Leitura recomendada
Últimas publicações
Top 5 membros
- dddweb213 pts
- Jotah191 pts
- fbinasco165 pts
- andersonop153 pts
- fredbcn117 pts
Últimos membros cadastrados
- reniltonem 02/09
- baixehdem 02/09
- danilocarlosem 02/09



