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:

<?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.




Rec6 Digg del.icio.us

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


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

AvatarEnviado por BMCVET em 07/11/2009 às 12:09

Muito Bom Tuturial Parabens !!!

--
BMCVET

AvatarEnviado 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


Top 5 membros

Últimos membros online

Últimos membros cadastrados