Tutorial de POO no PHP: Abstração
Autor/fonte: Bruno Viana
Tags: [ tutorial poo ]
Quando vamos desenvolver um programa, o certo não é pensar no projeto como um todo. A melhor forma de desenvolver é pensando e desenvolvendo em partes. Além de manter a sanidade do desevolvedor, a estrutura do código fica bem organizada. Para criar uma estrutura bem feita é necessário abstrair seu desenvolvimento.
Abstrair significa separar mentalmente, considerar isoladamente, simplificar. Assim nosso sistema deve ser separado de forma lógica com o objetivo de simplificar.
1. Classes abstratas
Sendo assim existem classes que chamamos de classes estruturais. Elas são responsáveis por manter uma estrutura padrão para seus filhos, indepentende do seu número. Ou seja, essas classes nunca serão instanciadas, pois somente seus filhos serão usados.
Com isso nosso exemplo anterior, deveríamos ter criado uma classe chamada Cheque, que seria a estrutura padrão para as classes ChequeComum e ChequeEspecial, onde essas duas ultimas herdariam Cheque e adicionariam ou sobrescreveriam apenas o que fosse relevante e a classe Cheque seria abstrata.
Para dizermos que uma classe é abstrata basta informarmos a palavra chave abstract.
2. Classes finais
Há também casos em que não queremos que uma classe seja estendida por mais nenhuma outra. Para fazermos isso definimos a classe como final utilizando a palavra chave com o mesmo nome, final. Vamos supor que a classe ContaEspecial não pode ser estendida, porém alguém tentou de qualquer forma fazer isso:
3. Métodos abstratos
Assim como classes, os métodos abstratos também são criados apenas para estruturação das classes filhas. Às vezes queremos que as classes derivadas de uma classe pai tenham obrigatóriamente um método específico, para garantir que não haja conflito em outros métodos que dependem desse primeiro.
Note que na classe Cheque o método calculaJuros() não é escrito, ele possui apenas sua assinatura. Isso é perfeitamente possível no caso de métodos abstratos.
4. Métodos finais
Quando um método é dito como final ele não pode ser sobrescrito ou seja, a classe filha continua tento acesso a ele, mas não pode mudá-lo.
Abstrair significa separar mentalmente, considerar isoladamente, simplificar. Assim nosso sistema deve ser separado de forma lógica com o objetivo de simplificar.
1. Classes abstratas
Sendo assim existem classes que chamamos de classes estruturais. Elas são responsáveis por manter uma estrutura padrão para seus filhos, indepentende do seu número. Ou seja, essas classes nunca serão instanciadas, pois somente seus filhos serão usados.
Com isso nosso exemplo anterior, deveríamos ter criado uma classe chamada Cheque, que seria a estrutura padrão para as classes ChequeComum e ChequeEspecial, onde essas duas ultimas herdariam Cheque e adicionariam ou sobrescreveriam apenas o que fosse relevante e a classe Cheque seria abstrata.
Para dizermos que uma classe é abstrata basta informarmos a palavra chave abstract.
<?php
abstract class Cheque
{
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; // não há juros
}
}
class ChequeComum extends Cheque
{
public function calculaJuros()
{
return $this->valor * 1.25; // calcula 25% em cima do valor;
}
}
class ChequeEspecial extends Cheque
{
public function calculaJuros()
{
return $this->valor * 1.10; // calcula 10% em cima do valor;
}
}
/*
* Tentando instanciar a classe Cheque.
* Isto vai causar um Fatal Error, pois ela é abstrata e não pode ser instanciada.
*/
$cheque = new Cheque();
?>
2. Classes finais
Há também casos em que não queremos que uma classe seja estendida por mais nenhuma outra. Para fazermos isso definimos a classe como final utilizando a palavra chave com o mesmo nome, final. Vamos supor que a classe ContaEspecial não pode ser estendida, porém alguém tentou de qualquer forma fazer isso:
<?php
final class ChequeEspecial extends Cheque
{
public function calculaJuros()
{
return $this->valor * 1.10; // calcula 10% em cima do valor;
}
}
/**
* Ao ver que estamos tentando herdar uma classe final,
* o PHP lança um Fatal Error e para a execução do código
*/
class ChequeContaUniversitaria extends ChequeEspecial
{
public function calculaJuros()
{
return $this->valor * 1.01; // calcula 1% em cima do valor;
}
}
// Este código não chega a ser executado
$cheque = new ChequeContaUniversitaria();
?>
3. Métodos abstratos
Assim como classes, os métodos abstratos também são criados apenas para estruturação das classes filhas. Às vezes queremos que as classes derivadas de uma classe pai tenham obrigatóriamente um método específico, para garantir que não haja conflito em outros métodos que dependem desse primeiro.
<?php
abstract class Cheque
{
// outros métodos
abstract function calculaJuros();
}
class ChequeContaUniversitaria extends Cheque
{
/**
* Esta classe não precisa de calculo de juros.
* Mas se este método não for definido o PHP dispara um Fatal Error,
* pois na classe pai esse método está como abstrato.
*/
public function calculaJuros()
{
return $this->valor; // não há juros;
}
}
?>
Note que na classe Cheque o método calculaJuros() não é escrito, ele possui apenas sua assinatura. Isso é perfeitamente possível no caso de métodos abstratos.
4. Métodos finais
Quando um método é dito como final ele não pode ser sobrescrito ou seja, a classe filha continua tento acesso a ele, mas não pode mudá-lo.
<?php
abstract class Cheque
{
final function calculaTotal()
{
// ...
}
}
class ChequeContaUniversitaria extends Cheque
{
/**
* Isto retorna um Fatal Error
*/
public function calculaTotal()
{
return 0.0;
}
}
?>

Enviado por xKuRt em 03/02/2009 às 08:45
Itens relacionados
Tutorial de POO no PHP: Programação Estruturada x Programação Orientada a Objetos
Tutorial de POO no PHP: Tratamento de erros
Tutorial de POO no PHP: Classes e Objetos
Tutorial de POO no PHP: Herança e polimorfismo
Tutorial de POO no PHP: Intercepções
Tutorial de POO no PHP: Encapsulamento
Tutorial de POO no PHP: Membros da classe
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 |
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



