SlideShare una empresa de Scribd logo
1 de 51
Orientação a Objetos em PHP
Grupo de Usuários de PHP de Mato Grosso do Sul
03/10/09 – José Ricardo da Silva- 2º Workshop do PHPMS - Senac – Campo Grande/MS - Brasil
Conteúdo abordado
✔ Introdução à OO
✔ Definição de classes e instanciação de objetos
✔ Palavras-chave e operadores relativos à OO em PHP
✔ Herança
✔ Interfaces
✔ Conclusões
✔ Perguntas
Intro
✔ Olhe a sua volta. O que você vê?
✔ Objetos reais possuem duas características
✔ Estado
✔ Comportamento
✔ Cachorros
✔ Nome, cor, raça, estão com fome, estão felizes, etc
✔ Latem, buscam coisas, balançam o rabo
Objetos
✔ Objetos podem ser muito simples
✔ Uma lamparina
✔ Estados: acesa ou apagada
✔ Comportamento: pode ser ligada e desligada
✔ Ou muito complexos
✔ Vários estados e vários comportamentos
✔ Podem conter outros objetos
✔ Interagem com outros objetos
✔ Herdam propriedades e comportamentos de outros objetos
Objetos em software
Objetos em software
Objetos em software
✔ O estado é armazenado em variáveis
✔ E o comportamento é definido através de métodos
Classes
✔ Templates de objetos
✔ Definem estado
✔ Atributos
✔ De objetos e da própria classe
✔ E comportamento
✔ Métodos
✔ De objetos e da própria clase
✔ Palavra-chave: class e new
✔ Novidades: $this e ->
class Cachorro {
var $nome;
var $cor;
var $raca;
var $estaComFome = false;
var $estaFeliz = true;
}
$meuCachorro = new Cachorro();
$meuCachorro -> nome = “bidu”;
$meuCachorro -> cor = “marrom”;
$meuCachorro -> raca = “vira-latas”;
Objeto
✔ Uma instância de uma classe
✔ Armazena dados
✔ Ocupa espaço na memória
Animal
CachorroSubclasse
Objeto
class Cachorro {
var $nome;
var $cor;
var $raca;
var $estaComFome = false;
var $estaFeliz = true;
}
$meuCachorro = new Cachorro();
$meuCachorro -> nome = “bidu”;
$meuCachorro -> cor = “marrom”;
$meuCachorro -> raca = “vira-latas”;
PHP 4? WTF?
Visibilidade
✔ Introduzidas no PHP5
✔ public
✔ private
✔ protected
class Cachorro {
public $nome;
private $cor;
private $raca;
var $estaComFome = false;
var $estaFeliz = true;
}
$meuCachorro = new Cachorro();
$meuCachorro -> nome = “bidu”;
$meuCachorro -> cor = “marrom”;
class Cachorro {
public $nome;
private $cor;
private $raça;
private $estaComFome = false;
private $estaFeliz = true;
}
$meuCachorro = new Cachorro();
$meuCachorro -> nome = “bidu”;
$meuCachorro -> cor = “marrom”;
Fatal error: Cannot access
private property
Cachorro::$cor in ...
Encapsulamento
✔ Princípio fundamental de OO
✔ Esconder o estado de um objeto
✔ Troca de estado → Invocação de método
Lembram?
class Cachorro {
private $raca;
private $estaComFome = true;
private $estaFeliz = false;
private $racas = array('vira-latas',
'pastor alemão', 'pitbull');
public function definaRaca($raca) {
if (in_array($raca, $this -> racas))
$this -> raca = $raca;
}
public function comer() {
$estaComFome = false;
$estaFeliz = true;
}
}
$meuCachorro = new Cachorro();
$meuCachorro -> definaRaca('pitbull');
$meuCachorro -> comer();
class Cachorro {
public $racas = array('vira-latas',
'pastor alemão', 'pitbull');
public function definaRaca($raca) { … }
...
}
$meuCachorro = new Cachorro();
$meuCachorro -> definaRaca($meuCachorro -> racas[1]);
echo $meuCachorro -> racas[2];
new SplMaxHeap();
Encapsulamento - Benefícios
✔ O estado é o que diferencia um objeto de outro
✔ Inclusive de um objeto inválido
✔ Mantém-se o controle sobre como o “mundo”
manipula o objeto
✔ Cachorro de cor “livro” ou de raça “abacate”?
✔ Assume-se que o método funciona
✔ “Como” não é importante, é?
✔ Pressupostos sobre o funcionamento podem trazer
problemas
✔ Manipulação externa de estado → dor de cabeça
Atributos e Métodos de Classe
✔ Sem instanciação de objeto
✔ Palavra-chave: static
✔ Default: public
class Cachorro {
private $nome;
private $cor;
private $raça;
private $estaComFome = false;
private $estaFeliz = true;
static $racas = array('vira-latas',
'pastor alemão',
'pitbull');
}
class Cachorro {
private $nome;
private $cor;
private $raça;
private $estaComFome = false;
private $estaFeliz = true;
private static $racas = array('vira-latas',
'pastor alemão',
'pitbull');
}
Static
✔ Nos métodos
✔ Sai a $this
✔ Entra a self
✔ No acesso
✔ Sai o ->
✔ Entra o operador de resolução de escopo
✔::
class Cachorro {
private $nome;
private $cor;
private $raça;
private $estaComFome = false;
private $estaFeliz = true;
private static $racas = array('vira-latas',
'pastor alemão',
'pitbull');
public static $patas = 2;
public function definaRaca($raca) {
if (in_array($raca, self::$racas))
$this -> raca = $raca;
}
}
$cachorro = new Cachorro();
$cachorro -> definaRaca('pitbull');
echo 'Cachorros têm: ' . Cachorro::$patas . 'patas';
class Cachorro {
...
private static $racas = array('vira-latas',
'pastor alemão',
'pitbull');
public function definaRaca($raca) {
if (in_array($raca, self::$racas))
$this -> raca = $raca;
}
public static function imprimaRacas() {
// $this? nem pensar
foreach(self::$racas as $raca)
echo $raca . “n”;
}
}
Cachorro::imprimaRacas();
Constantes de classe
✔ É possível definir também valores constantes a uma
classe
✔ Palavra-chave: const
class Cachorro {
private $nome;
private $cor;
private $raca;
private $estaComFome = false;
private $estaFeliz = true;
const patas = 2; // sem cifrão
}
echo 'Cachorros têm: ' . Cachorro::patas . ' patas';
Herança
✔ No mundo real é comum encontrarmos objetos com
características em comum
Veiculo
Carro Moto Bicicleta Avião
$velocidade
acelerar()
freiar()
$cor
Herança
✔ Hierarquia de classes
✔ Uma super-classe é uma generalização de uma ou mais
subclasses
✔ Subclasses
✔ Herdam os atributos e os métodos de suas super-classes
✔ Podem definir novos atributos e métodos
✔ Mecanismo de reuso
✔ Aumenta a complexidade
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction();
$this -> proFunction();
$this -> pubFunction();
}
}
$obj = new Base();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função publica chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction();
$this -> proFunction();
$this -> pubFunction();
}
}
$obj = new Base();
$obj -> varProtegida = 'novo valor';
$obj -> outraFuncao();
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction();
$this -> proFunction();
$this -> pubFunction();
}
}
$obj = new Base();
echo $obj -> varProtegida;
$obj -> outraFuncao();
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction();
$this -> proFunction();
$this -> pubFunction();
}
}
$obj = new Base();
$obj -> proFunction();
$obj -> outraFuncao();
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base { }
$obj = new Classe1();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função publica chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
}
$obj = new Classe1();
$obj -> outraFuncao();
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
public function pubFunction() {
echo "Função {$this -> varPublica} da classe filha chamadan";
}
}
$obj = new Classe1();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função publica da classe filha chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
public function pubFunction() {
echo "Função {$this -> varProtegida} da classe filha chamadan";
}
}
$obj = new Classe1();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função protegida da classe filha chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
public function pubFunction() {
echo "Função {$this -> varPrivada} da classe filha chamadan";
}
}
$obj = new Classe1();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função da classe filha chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
public function pubFunction() {
$this -> proFunction();
}
}
$obj = new Classe1();
$obj -> outraFuncao();
Função privada chamada
Função protegida chamada
Função protegida chamada
class Base {
private $varPrivada = 'privada';
protected $varProtegida = 'protegida';
public $varPublica = 'publica';
private function priFunction() {
echo "Função {$this -> varPrivada} chamadan";
}
protected function proFunction() {
echo "Função {$this -> varProtegida} chamadan";
}
public function pubFunction() {
echo "Função {$this -> varPublica} chamadan";
}
public function outraFuncao() {
$this -> priFunction(); $this -> proFunction(); this -> pubFunction();
}
}
class Classe1 extends Base {
public function pubFunction() {
$this -> priFunction();
}
}
$obj = new Classe1();
$obj -> outraFuncao();
Fatal Error!
abstract class Veiculo {
protected $velocidade;
abstract public function acelerar($qtde);
}
abstract class VeiculoMotorizado extends Veiculo {
protected $nivelDoTanque;
public function nivelDoTanque() {
return $this -> nivelDoTanque;
}
}
class Moto extends VeiculoMotorizado {
public function gireAcelerador($qtde) { … }
public function acelerar($qtde) {
$this -> velocidade += $this -> gireAcelerador($qtde);
}
}
class Carro extends VeiculoMotorizado {
public function piseAcelerador($qtde) { ... }
public function acelerar($qtde) {
$this -> velocidade += $this -> piseAcelerador($qtde);
}
}
$obj = new Carro();
$obj -> acelerar(2);
echo $obj -> nivelDoTanque();
Interfaces
✔ Um contrato
✔ Especificam quais métodos uma classe deve
implementar
✔ Não definem como os métodos devem ser
implementados
✔ São definidas de maneira similar à definição de
classes
✔ Palavras-chave: interface e implements
✔ Métodos sem corpo
✔ Todos os métodos são públicos
interface Bicicleta {
public function mudarDirecao($valor);
public function acelerar($incremento);
public function freiar($decremento);
}
class Trek implements Bicicleta {
public function mudarDirecao($valor) {…}
public function acelerar($incremento) {
// trocando de marcha
$this -> trocaMarcha($this -> marcha - 1);
// acelerando...
}
public function freiar($decremento) { … }
}
class BarraForte implements Bicicleta {
public function mudarDirecao($valor) {…}
public function acelerar($incremento) { … }
public function freiar($decremento) {
// colocando o pé no chão $decremento vezes
$this -> coloqueOPeNoChao($decremento);
}
}
interface Produto {
public function definirPreco($valor);
public function obterPreco($valor);
}
interface Veiculo {
public function mudarDirecao($valor);
public function acelerar($incremento);
public function freiar($decremento);
}
interface Bicicleta extends Veiculo {
public function empinar($grau);
}
interface BicicletaComMarchas extends Bicicleta, Produto {
public function trocarMarcha($incOuDec);
}
class Caloi implements BicicletaComMarchas {
public function definirPreco($valor) {
// …
}
public function obterPreco($valor) { … }
public function mudarDirecao($valor) { … }
public function acelerar($incremento) { … }
public function freiar($decremento) { … }
public function empinar($grau) { … }
public function trocarMarcha($incOuDec) { … }
}
interface Bicicleta {
const TIPO = “terrestre”;
public function mudarDirecao($valor);
public function acelerar($incremento);
public function freiar($decremento);
}
class BarraForte implements Bicicleta {
const TIPO = “anfíbio”;
public function mudarDirecao($valor) {…}
public function acelerar($incremento) { … }
public function freiar($decremento) {
// colocando o pé no chão $decremento vezes
$this -> coloqueOPeNoChao($decremento);
}
}
interface Produto {
public function comprar();
public function definirNome($nome);
public function vender();
}
interface Objeto {
public function girar($direcao);
public function definirNome($nome);
public function remover();
}
interface Bicicleta extends Objeto, Produto {
} ?
Final
✔ Introduzida no PHP5
✔ Previne que classes filhas sobrescrevam um método
✔ Previne que classes sejam extendidas
✔ Não se aplica a propriedades
class Base {
public function test() {
echo "test() foi invocada";
}
final public function maisTestes() {
echo "Mais testes";
}
}
class Filha extends Base {
public function maisTestes() {
echo "oh-oh";
}
}
final class Base {
...
}
class Filha extends Base {
}
Conclusões
✔ Construção de software a partir de objetos que
interagem entre si
✔ Cada um é responsável pela
✔ Manutenção de seu estado
✔ Execução de suas operações
✔ Maior manutenibilidade
✔ Objetos são entidades que encapsulam funcionalidades
✔ Componentes reusáveis
✔ Se um objeto “quebra”, troque-o
✔ Mapeamento
entidades do mundo real → objetos do sistema
About
Site: http://www.josericardo.eti.br
 
E-mail: contato@josericardo.eti.br
 
Twitter: http://www.twitter.com/zehzinho
Alguma dúvida? :)
 
Referências
✔ http://www.php.net/manual
✔ http://www.php.net/manual/en/language.oop5.php
✔ http://www.slideshare.net/sudarsun/object-oriented-design
✔ http://java.sun.com/docs/books/tutorial/java/concepts/index.html

Más contenido relacionado

La actualidad más candente

Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressZé Fontainhas
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1garux
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BEscopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BPaulo Henrique Lerbach Rodrigues
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Paulo Henrique Lerbach Rodrigues
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CInterfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CPaulo Henrique Lerbach Rodrigues
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 

La actualidad más candente (20)

Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
JasperReports
JasperReportsJasperReports
JasperReports
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 
Aula5
Aula5Aula5
Aula5
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Hooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPressHooks, o condimento mágico e escondido do WordPress
Hooks, o condimento mágico e escondido do WordPress
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BEscopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
 
Introdução à JQuery
Introdução à JQueryIntrodução à JQuery
Introdução à JQuery
 
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
Revisão de Classes e arquivos .java - Preparatório Certificação - OCAJP7 - Au...
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
NotORM
NotORMNotORM
NotORM
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - CInterfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
Interfaces e Polimorfismo - Preparatório Certificação - OCAJP7 - Aula 1 - C
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Meta-programacao em python
Meta-programacao em pythonMeta-programacao em python
Meta-programacao em python
 

Destacado

Aula 03 - Layout e Integração de formulário com HTML e PHP
Aula 03  - Layout e Integração de formulário com HTML e PHPAula 03  - Layout e Integração de formulário com HTML e PHP
Aula 03 - Layout e Integração de formulário com HTML e PHPDalton Martins
 
Aula 3 html (formulário)
Aula 3   html (formulário)Aula 3   html (formulário)
Aula 3 html (formulário)andreluizlc
 
Apresentação 8 simulado alfabetização
Apresentação 8 simulado alfabetizaçãoApresentação 8 simulado alfabetização
Apresentação 8 simulado alfabetizaçãopvassoler86
 
JornalPLP133
JornalPLP133JornalPLP133
JornalPLP133Y2Studio
 
Informativo comites 25-06-2013
Informativo comites 25-06-2013Informativo comites 25-06-2013
Informativo comites 25-06-2013MariluciFriia
 
Agenda FGV-EAESP De 17/06/13 à 23/06/13
Agenda FGV-EAESP  De 17/06/13 à 23/06/13Agenda FGV-EAESP  De 17/06/13 à 23/06/13
Agenda FGV-EAESP De 17/06/13 à 23/06/13FGV-EAESP
 
Para entender as mídias sociais
Para entender as mídias sociaisPara entender as mídias sociais
Para entender as mídias sociaisPoliana Lopes
 
Cuidados com o seu imóvel - Guia e Cartilha - bycyrela
Cuidados com o seu imóvel - Guia e Cartilha - bycyrelaCuidados com o seu imóvel - Guia e Cartilha - bycyrela
Cuidados com o seu imóvel - Guia e Cartilha - bycyrelaAyres Consultoria
 
Apostila f 250 completa
Apostila   f 250 completaApostila   f 250 completa
Apostila f 250 completaedivan almeida
 
Gestão de pessoas
Gestão de pessoasGestão de pessoas
Gestão de pessoasShahlaca
 

Destacado (20)

Aula 03 - Layout e Integração de formulário com HTML e PHP
Aula 03  - Layout e Integração de formulário com HTML e PHPAula 03  - Layout e Integração de formulário com HTML e PHP
Aula 03 - Layout e Integração de formulário com HTML e PHP
 
Padronização de cadastros e abreviações em campos de dados
Padronização de cadastros e abreviações em campos de dadosPadronização de cadastros e abreviações em campos de dados
Padronização de cadastros e abreviações em campos de dados
 
Aula 3 html (formulário)
Aula 3   html (formulário)Aula 3   html (formulário)
Aula 3 html (formulário)
 
Taller1 PRESENTACIÓN 2
Taller1 PRESENTACIÓN 2Taller1 PRESENTACIÓN 2
Taller1 PRESENTACIÓN 2
 
Momento 4
Momento 4Momento 4
Momento 4
 
Apresentação 8 simulado alfabetização
Apresentação 8 simulado alfabetizaçãoApresentação 8 simulado alfabetização
Apresentação 8 simulado alfabetização
 
Taller 1
Taller 1Taller 1
Taller 1
 
Formulários em html
Formulários em htmlFormulários em html
Formulários em html
 
Fontes em Aberto ao 3º Setor
Fontes em Aberto ao 3º SetorFontes em Aberto ao 3º Setor
Fontes em Aberto ao 3º Setor
 
Verão Numa Boa
Verão Numa BoaVerão Numa Boa
Verão Numa Boa
 
JornalPLP133
JornalPLP133JornalPLP133
JornalPLP133
 
Ferramentas
FerramentasFerramentas
Ferramentas
 
Informativo comites 25-06-2013
Informativo comites 25-06-2013Informativo comites 25-06-2013
Informativo comites 25-06-2013
 
Agenda FGV-EAESP De 17/06/13 à 23/06/13
Agenda FGV-EAESP  De 17/06/13 à 23/06/13Agenda FGV-EAESP  De 17/06/13 à 23/06/13
Agenda FGV-EAESP De 17/06/13 à 23/06/13
 
Hotéis, pousadas e flats em santos
Hotéis, pousadas e flats em santosHotéis, pousadas e flats em santos
Hotéis, pousadas e flats em santos
 
Para entender as mídias sociais
Para entender as mídias sociaisPara entender as mídias sociais
Para entender as mídias sociais
 
Jornal a sintese 5a edição
Jornal a sintese    5a ediçãoJornal a sintese    5a edição
Jornal a sintese 5a edição
 
Cuidados com o seu imóvel - Guia e Cartilha - bycyrela
Cuidados com o seu imóvel - Guia e Cartilha - bycyrelaCuidados com o seu imóvel - Guia e Cartilha - bycyrela
Cuidados com o seu imóvel - Guia e Cartilha - bycyrela
 
Apostila f 250 completa
Apostila   f 250 completaApostila   f 250 completa
Apostila f 250 completa
 
Gestão de pessoas
Gestão de pessoasGestão de pessoas
Gestão de pessoas
 

Similar a Orientação a Objetos em PHP

Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPguilhermemar
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Curso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaCurso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaJonata Weber
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualMichael Castillo Granados
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesCarlos Santos
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Israel Messias
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Vitor Mattos
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 

Similar a Orientação a Objetos em PHP (20)

Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHP
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Curso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aulaCurso PHP UNIFACS 2014.1 – 2ª aula
Curso PHP UNIFACS 2014.1 – 2ª aula
 
Solid
SolidSolid
Solid
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Da Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtualDa Argila Ao Forte - Como desenvolver uma loja virtual
Da Argila Ao Forte - Como desenvolver uma loja virtual
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1
 
Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!Xdebug: Seus problemas acabaram!
Xdebug: Seus problemas acabaram!
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 

Orientação a Objetos em PHP

  • 1. Orientação a Objetos em PHP Grupo de Usuários de PHP de Mato Grosso do Sul 03/10/09 – José Ricardo da Silva- 2º Workshop do PHPMS - Senac – Campo Grande/MS - Brasil
  • 2. Conteúdo abordado ✔ Introdução à OO ✔ Definição de classes e instanciação de objetos ✔ Palavras-chave e operadores relativos à OO em PHP ✔ Herança ✔ Interfaces ✔ Conclusões ✔ Perguntas
  • 3. Intro ✔ Olhe a sua volta. O que você vê? ✔ Objetos reais possuem duas características ✔ Estado ✔ Comportamento ✔ Cachorros ✔ Nome, cor, raça, estão com fome, estão felizes, etc ✔ Latem, buscam coisas, balançam o rabo
  • 4. Objetos ✔ Objetos podem ser muito simples ✔ Uma lamparina ✔ Estados: acesa ou apagada ✔ Comportamento: pode ser ligada e desligada ✔ Ou muito complexos ✔ Vários estados e vários comportamentos ✔ Podem conter outros objetos ✔ Interagem com outros objetos ✔ Herdam propriedades e comportamentos de outros objetos
  • 7. Objetos em software ✔ O estado é armazenado em variáveis ✔ E o comportamento é definido através de métodos
  • 8. Classes ✔ Templates de objetos ✔ Definem estado ✔ Atributos ✔ De objetos e da própria classe ✔ E comportamento ✔ Métodos ✔ De objetos e da própria clase ✔ Palavra-chave: class e new ✔ Novidades: $this e ->
  • 9. class Cachorro { var $nome; var $cor; var $raca; var $estaComFome = false; var $estaFeliz = true; } $meuCachorro = new Cachorro(); $meuCachorro -> nome = “bidu”; $meuCachorro -> cor = “marrom”; $meuCachorro -> raca = “vira-latas”;
  • 10. Objeto ✔ Uma instância de uma classe ✔ Armazena dados ✔ Ocupa espaço na memória Animal CachorroSubclasse Objeto
  • 11. class Cachorro { var $nome; var $cor; var $raca; var $estaComFome = false; var $estaFeliz = true; } $meuCachorro = new Cachorro(); $meuCachorro -> nome = “bidu”; $meuCachorro -> cor = “marrom”; $meuCachorro -> raca = “vira-latas”; PHP 4? WTF?
  • 12. Visibilidade ✔ Introduzidas no PHP5 ✔ public ✔ private ✔ protected
  • 13. class Cachorro { public $nome; private $cor; private $raca; var $estaComFome = false; var $estaFeliz = true; } $meuCachorro = new Cachorro(); $meuCachorro -> nome = “bidu”; $meuCachorro -> cor = “marrom”;
  • 14. class Cachorro { public $nome; private $cor; private $raça; private $estaComFome = false; private $estaFeliz = true; } $meuCachorro = new Cachorro(); $meuCachorro -> nome = “bidu”; $meuCachorro -> cor = “marrom”; Fatal error: Cannot access private property Cachorro::$cor in ...
  • 15. Encapsulamento ✔ Princípio fundamental de OO ✔ Esconder o estado de um objeto ✔ Troca de estado → Invocação de método Lembram?
  • 16. class Cachorro { private $raca; private $estaComFome = true; private $estaFeliz = false; private $racas = array('vira-latas', 'pastor alemão', 'pitbull'); public function definaRaca($raca) { if (in_array($raca, $this -> racas)) $this -> raca = $raca; } public function comer() { $estaComFome = false; $estaFeliz = true; } } $meuCachorro = new Cachorro(); $meuCachorro -> definaRaca('pitbull'); $meuCachorro -> comer();
  • 17. class Cachorro { public $racas = array('vira-latas', 'pastor alemão', 'pitbull'); public function definaRaca($raca) { … } ... } $meuCachorro = new Cachorro(); $meuCachorro -> definaRaca($meuCachorro -> racas[1]); echo $meuCachorro -> racas[2]; new SplMaxHeap();
  • 18. Encapsulamento - Benefícios ✔ O estado é o que diferencia um objeto de outro ✔ Inclusive de um objeto inválido ✔ Mantém-se o controle sobre como o “mundo” manipula o objeto ✔ Cachorro de cor “livro” ou de raça “abacate”? ✔ Assume-se que o método funciona ✔ “Como” não é importante, é? ✔ Pressupostos sobre o funcionamento podem trazer problemas ✔ Manipulação externa de estado → dor de cabeça
  • 19. Atributos e Métodos de Classe ✔ Sem instanciação de objeto ✔ Palavra-chave: static ✔ Default: public
  • 20. class Cachorro { private $nome; private $cor; private $raça; private $estaComFome = false; private $estaFeliz = true; static $racas = array('vira-latas', 'pastor alemão', 'pitbull'); }
  • 21. class Cachorro { private $nome; private $cor; private $raça; private $estaComFome = false; private $estaFeliz = true; private static $racas = array('vira-latas', 'pastor alemão', 'pitbull'); }
  • 22. Static ✔ Nos métodos ✔ Sai a $this ✔ Entra a self ✔ No acesso ✔ Sai o -> ✔ Entra o operador de resolução de escopo ✔::
  • 23. class Cachorro { private $nome; private $cor; private $raça; private $estaComFome = false; private $estaFeliz = true; private static $racas = array('vira-latas', 'pastor alemão', 'pitbull'); public static $patas = 2; public function definaRaca($raca) { if (in_array($raca, self::$racas)) $this -> raca = $raca; } } $cachorro = new Cachorro(); $cachorro -> definaRaca('pitbull'); echo 'Cachorros têm: ' . Cachorro::$patas . 'patas';
  • 24. class Cachorro { ... private static $racas = array('vira-latas', 'pastor alemão', 'pitbull'); public function definaRaca($raca) { if (in_array($raca, self::$racas)) $this -> raca = $raca; } public static function imprimaRacas() { // $this? nem pensar foreach(self::$racas as $raca) echo $raca . “n”; } } Cachorro::imprimaRacas();
  • 25. Constantes de classe ✔ É possível definir também valores constantes a uma classe ✔ Palavra-chave: const
  • 26. class Cachorro { private $nome; private $cor; private $raca; private $estaComFome = false; private $estaFeliz = true; const patas = 2; // sem cifrão } echo 'Cachorros têm: ' . Cachorro::patas . ' patas';
  • 27. Herança ✔ No mundo real é comum encontrarmos objetos com características em comum Veiculo Carro Moto Bicicleta Avião $velocidade acelerar() freiar() $cor
  • 28. Herança ✔ Hierarquia de classes ✔ Uma super-classe é uma generalização de uma ou mais subclasses ✔ Subclasses ✔ Herdam os atributos e os métodos de suas super-classes ✔ Podem definir novos atributos e métodos ✔ Mecanismo de reuso ✔ Aumenta a complexidade
  • 29. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); $this -> pubFunction(); } } $obj = new Base(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função publica chamada
  • 30. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); $this -> pubFunction(); } } $obj = new Base(); $obj -> varProtegida = 'novo valor'; $obj -> outraFuncao();
  • 31. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); $this -> pubFunction(); } } $obj = new Base(); echo $obj -> varProtegida; $obj -> outraFuncao();
  • 32. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); $this -> pubFunction(); } } $obj = new Base(); $obj -> proFunction(); $obj -> outraFuncao();
  • 33. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { } $obj = new Classe1(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função publica chamada
  • 34. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { } $obj = new Classe1(); $obj -> outraFuncao(); class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { public function pubFunction() { echo "Função {$this -> varPublica} da classe filha chamadan"; } } $obj = new Classe1(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função publica da classe filha chamada
  • 35. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { public function pubFunction() { echo "Função {$this -> varProtegida} da classe filha chamadan"; } } $obj = new Classe1(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função protegida da classe filha chamada
  • 36. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { public function pubFunction() { echo "Função {$this -> varPrivada} da classe filha chamadan"; } } $obj = new Classe1(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função da classe filha chamada
  • 37. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { public function pubFunction() { $this -> proFunction(); } } $obj = new Classe1(); $obj -> outraFuncao(); Função privada chamada Função protegida chamada Função protegida chamada
  • 38. class Base { private $varPrivada = 'privada'; protected $varProtegida = 'protegida'; public $varPublica = 'publica'; private function priFunction() { echo "Função {$this -> varPrivada} chamadan"; } protected function proFunction() { echo "Função {$this -> varProtegida} chamadan"; } public function pubFunction() { echo "Função {$this -> varPublica} chamadan"; } public function outraFuncao() { $this -> priFunction(); $this -> proFunction(); this -> pubFunction(); } } class Classe1 extends Base { public function pubFunction() { $this -> priFunction(); } } $obj = new Classe1(); $obj -> outraFuncao(); Fatal Error!
  • 39. abstract class Veiculo { protected $velocidade; abstract public function acelerar($qtde); } abstract class VeiculoMotorizado extends Veiculo { protected $nivelDoTanque; public function nivelDoTanque() { return $this -> nivelDoTanque; } } class Moto extends VeiculoMotorizado { public function gireAcelerador($qtde) { … } public function acelerar($qtde) { $this -> velocidade += $this -> gireAcelerador($qtde); } } class Carro extends VeiculoMotorizado { public function piseAcelerador($qtde) { ... } public function acelerar($qtde) { $this -> velocidade += $this -> piseAcelerador($qtde); } } $obj = new Carro(); $obj -> acelerar(2); echo $obj -> nivelDoTanque();
  • 40. Interfaces ✔ Um contrato ✔ Especificam quais métodos uma classe deve implementar ✔ Não definem como os métodos devem ser implementados ✔ São definidas de maneira similar à definição de classes ✔ Palavras-chave: interface e implements ✔ Métodos sem corpo ✔ Todos os métodos são públicos
  • 41. interface Bicicleta { public function mudarDirecao($valor); public function acelerar($incremento); public function freiar($decremento); } class Trek implements Bicicleta { public function mudarDirecao($valor) {…} public function acelerar($incremento) { // trocando de marcha $this -> trocaMarcha($this -> marcha - 1); // acelerando... } public function freiar($decremento) { … } } class BarraForte implements Bicicleta { public function mudarDirecao($valor) {…} public function acelerar($incremento) { … } public function freiar($decremento) { // colocando o pé no chão $decremento vezes $this -> coloqueOPeNoChao($decremento); } }
  • 42. interface Produto { public function definirPreco($valor); public function obterPreco($valor); } interface Veiculo { public function mudarDirecao($valor); public function acelerar($incremento); public function freiar($decremento); } interface Bicicleta extends Veiculo { public function empinar($grau); } interface BicicletaComMarchas extends Bicicleta, Produto { public function trocarMarcha($incOuDec); }
  • 43. class Caloi implements BicicletaComMarchas { public function definirPreco($valor) { // … } public function obterPreco($valor) { … } public function mudarDirecao($valor) { … } public function acelerar($incremento) { … } public function freiar($decremento) { … } public function empinar($grau) { … } public function trocarMarcha($incOuDec) { … } }
  • 44. interface Bicicleta { const TIPO = “terrestre”; public function mudarDirecao($valor); public function acelerar($incremento); public function freiar($decremento); } class BarraForte implements Bicicleta { const TIPO = “anfíbio”; public function mudarDirecao($valor) {…} public function acelerar($incremento) { … } public function freiar($decremento) { // colocando o pé no chão $decremento vezes $this -> coloqueOPeNoChao($decremento); } }
  • 45. interface Produto { public function comprar(); public function definirNome($nome); public function vender(); } interface Objeto { public function girar($direcao); public function definirNome($nome); public function remover(); } interface Bicicleta extends Objeto, Produto { } ?
  • 46. Final ✔ Introduzida no PHP5 ✔ Previne que classes filhas sobrescrevam um método ✔ Previne que classes sejam extendidas ✔ Não se aplica a propriedades
  • 47. class Base { public function test() { echo "test() foi invocada"; } final public function maisTestes() { echo "Mais testes"; } } class Filha extends Base { public function maisTestes() { echo "oh-oh"; } }
  • 48. final class Base { ... } class Filha extends Base { }
  • 49. Conclusões ✔ Construção de software a partir de objetos que interagem entre si ✔ Cada um é responsável pela ✔ Manutenção de seu estado ✔ Execução de suas operações ✔ Maior manutenibilidade ✔ Objetos são entidades que encapsulam funcionalidades ✔ Componentes reusáveis ✔ Se um objeto “quebra”, troque-o ✔ Mapeamento entidades do mundo real → objetos do sistema
  • 51. Referências ✔ http://www.php.net/manual ✔ http://www.php.net/manual/en/language.oop5.php ✔ http://www.slideshare.net/sudarsun/object-oriented-design ✔ http://java.sun.com/docs/books/tutorial/java/concepts/index.html