Você está na página 1de 5

02/05/2011

PHP

Abstração, Interfaces e Polimorfismo

Abstração

• Virtualização de objetos-conceitos
• Exemplos: veículo, cor, móvel, ser vivo
• Abstração de um conceito que as subclasses
irão implementar
• Padronização: evita que cada subclasse crie
sua própria assinatura do método
• Facilita a utilização em laços de repetição e
navegação de listas de objetos
• É uma classe não instanciável

Abstração

• Somente classes abstratas podem conter


métodos abstratos
• Classes abstratas podem contar atributos e
métodos não abstratos
• A primeira classe não-abstrata deve
implementar as assinaturas dos métodos
abstratos da classe de qual deriva
• Classes abstratas podem herdar de outras
classes abstratas sem implementar os métodos

1
02/05/2011

Exemplos de conceitos

Veículo
$velocidade
acelerar()

VeículoTerrestre VeículoAéreo
$velocidade
$velocidade
acelerar()
acelerar()
decolar()
$numeroDeRodas
$transponder

Carro Moto Avião


$velocidade $velocidade
$velocidade Elevador
acelerar() $velocidade
acelerar() acelerar()
decolar() acelerar()
$numeroDeRodas $numeroDeRodas
$transponder $andares
$portaMalas $travaCapacete
$asas

Abstraindo classes na prática


• Operador abstract
abstract class Veiculo {
public $velocidade = 0;
abstract function acelerar();
}

abstract class VeiculoTerrestre extends Veiculo { abstract class VeiculoAereo extends Veiculo {
public $numeroDeRodas; public $transponder;
} abstract function decolar();
}

class Carro class Moto class Aviao class Elevador


extends VeiculoTerrestre { extends VeiculoTerrestre { extends VeiculoAereo { extends Veiculo {
public $portaMalas; public $travaCapacete; public $asas; public $andares;
public function acelerar() { public function acelerar() { public function acelerar() { public function acelerar() {
// Implementação // Implementação // Implementação // Implementação
} } } }
} } public function decolar() { }
// Implementação
}
}

Interfaces

• Métodos abstratos
• Métodos desvinculados de classes
• Herança: é possível derivar de apenas uma
classe no PHP, mas é possível implementar
mais de uma Interface

2
02/05/2011

Exemplo de interface

Alugável
alugar()

DVD Livro Carro


alugarDvd()
alugar() alugar()
Alugar() alugar()

Interfaces na prática

• Operador interface
interface Alugavel {
public function alugar();
public function retornarLocacao();
}

• Operador implements
class Livro implements Alugavel { class Carro extends VeiculoTerrestre implements Alugavel {
public $portaMalas;
public function alugar() { public function acelerar() {
// Implementação // Implementação
} }
public function alugar() {
public function retornarLocacao() { // Implementação
// Implementação }
} public function retornarLocacao() {
// Implementação
} }
}

Interfaces
• Geralmente nomes que indicam uma qualidade
• Classes abstratas podem implementar interfaces, e
podem ou não implementar os métodos
• A primeira classe não abstrata de uma hierarquia
deve implementar ou herdar implementados todos
os métodos abstratos
• Não é possível incluir atributos em interfaces
• Uma classe pode implementar uma ou mais
interfaces, mas herdar de uma classe no máximo
• implements Alugavel, Dirigivel, Deletavel

3
02/05/2011

Polimorfismo
• Capacidade de um mesmo método executar
diferentes comportamentos, dependendo do
objeto sobre o qual está sendo invocado
• Não possui operador pois é um conceito
• Situações mais comuns que geram polimorfismo:
• Sobrescrita de métodos
• Implementação de classes abstratas
• Implementação de interfaces

Exemplo de polimorfismo
interface Alugavel {

public function alugar();

class Livro implements Alugavel { class DVD implements Alugavel {

public function alugar() { public function alugar() {


echo "Alugando um Livro"; echo "Alugando um DVD";
} }

} }

$o1 = new Livro();


$o2 = new DVD();

$o1->alugar(); // Alugando um Livro


$o2->alugar(); // Alugando um DVD

Exemplo de polimorfismo
class Gato {

public function miar() {


echo "Miado de Gato";
}

class GatoPersa extends Gato {

public function miar() {


echo "Miado de Gato Persa";
}

$o1 = new Gato();


$o2 = new GatoPersa();

$o1->miar(); // Miado de Gato


$o2->miar(); // Miado de Gato Persa

4
02/05/2011

Considerações finais sobre OO

• Benefícios Veículo

• É uma tendência VeículoTerrestre


• Uso no mercado cada vez maior
• Abstrair a realidade até que Carro

ponto para meu projeto?


CarroPasseio
• Coesão
CarroPasseioEsportivo
Abstração da realidade deve ser feita levando em
conta as características de cada projeto, abstraindo
somente os dados necessários. Ferrari

Aulas práticas e manuais on-line

Assista agora as aulas práticas.

Clique aqui para visualizar as aulas práticas disponíveis