PHP ORIENTADO A OBJETOS Aula 5 – 11/02/2009 Instrutor: Nelson Luis Rodrigues Pereira
Classes no PHP A estrutura de uma classe no PHP seguem o mesmo padrão de outras linguagens.  Cada classe possui atributos e operações ligadas a ela. As classes no PHP possuem a seguinte estrutura:  class classname { var $atributo1; var $atributo2; }
Classes no PHP As operações de uma classe são declaradas na forma de funções e podem ou não possuírem passagem de parâmetros ou valores de retornos.  class classname { function operation1 () { } function operation2 ($param1, $param2) { } }
Construtores Um construtor é chamado quando um objeto instancia  uma classe para a realização de tarefas de inicialização da mesma. Um construtor é declarado como as outras operações mas o seu identificador deve ser o nome da classe. class classname { function classname () { } }
Instanciar classes A instância da classe no PHP é semelhante a outras linguagens, usando-se da palavra reservada  new  e fazendo chamada ao construtor da classe. Lembrando que ao instanciar uma classe você está criando um objeto dessa classe. $a = new classname(); $b = new classname();
Utilizando atributos de classes Para utilizar atributos de uma classe faz-se necessário o uso do operador de associatividade (->), que funciona como o ponto em outras linguagens, como Java. $a = new classname(); $a->attribute = ‘value’; Para utilizar atributos de uma classe em operações da própria classe, usa-se o operador this. function operation($param) { $this->attribute = $param; }
Utilizando a atributos de classes Procure desenvolver os chamados métodos de retorno (Get) e de atribuição (Set) para atributos que serão usados constantemente.
Chamando operações de classes Para chamar operações de uma classe faz-se necessário também o uso do operador de associatividade (->). $a = new classname(); $a->operation1(); $x = $a->operation2(12,’test’);
Exemplo No nosso exemplo da loja de peças, crie duas classes: A primeira será a classe Peça. A segunda será a classe Loja. Modelemos juntos estas classes.
Modificadores de acesso São os conhecidos public, protected e private. PUBLIC: É  o  nível  de  acesso mais permissivo.  Serve  para  indicar  que  o método ou atributo da classe é público. Neste caso pode-se acessar a este atributo,  para  visualizá-lo  ou  editá-lo,  por  qualquer  outro  elemento  de nosso programa. É o modificador que se aplica caso não se indique outra coisa.  PRIVATE: É  o  nível  de  acesso mais  restritivo.  Serve  para  indicar  que  essa variável  somente  vai  poder  ser  acessada  pelo  próprio  objeto,  nunca  de fora. Se  tentarmos  acessar  um método  ou  atributo  declarado  private  de fora do próprio objeto, obteremos uma mensagem de erro indicando que não é possível a este elemento.  PROTECTED: é público dentro da própria classe e em suas heranças e privado para as demais classes.
Exemplo 1 class dado{  public $pontos;  function __construct(){  srand((double)microtime()*1000000);  }  public function tirar(){  $this->pontos=$randval = rand(1,6);  }  }  $meu_dado = new dado();  for ($i=0;$i<30;$i++){  $meu_dado->tirar();  &quot;<br>Saiu &quot; . $meu_dado->pontos . &quot;pontos&quot;;  }
Exemplo 2 class dado{  private $pontos;  function __construct(){  srand((double)microtime()*1000000);  }  private function tirar(){  $this->pontos=$randval = rand(1,6);  }  public function dar_nova_pontuacao(){  $this->tirar();  return $this->pontos;  }  }  $meu_dado = new dado();  for ($i=0;$i<30;$i++)  {  &quot;<br>Han salido &quot; . $meu_dado->dar_nova_pontuacao() .&quot; pontos&quot;;  }
Herança de classes No caso de uma classe ser subclasse de outra, utiliza-se da palavra reservada  extends  juntamente com a superclasse na assinatura  da subclasse. Class B extends A { var $attribute2; function operation3(){ } } $b = new B(); $b->operation1(); $b->attribute1 = 10; $b->operation2(); $b->attribute2 = 10;
Observações Em Herança em PHP permite que seja implementado o conceito de sobrescrever métodos ou atributos que já existam na superclasse (overriding), sendo essa mudança considerada apenas nos objetos que instanciam a subclasse. O PHP não suporta o conceito de herança múltipla, ou seja, uma subclasse só pode herdar de uma única classe. Podem ser declaradas mais de uma classe num arquivo PHP, mas para que estas classes sejam usadas  em outros arquivos, deve ser feita uma chamada a função  include(‘Nome do arquivo que se localiza a classe’);
Exemplos Herança
Exemplos – Classe Suporte class suporte{  public $titulo;  protected $numero;  private $preco;  function __construct($tit,$num,$preco){  $this->titulo = $tit;  $this->numero = $num;  $this->preco = $preco;  }  public function dar_preco_sem_imposto(){  return $this->preco;  }  public function dar_preco_com_imposto(){  return $this->preco * 1.16;  }
Exemplos – Classe Suporte public function dar_numero_identificacao(){  return $this->numero;  }  public function imprime_caracteristicas(){  echo $this->titulo;  echo &quot;<br>&quot; . $this->preco . &quot; (imposto nao incluido)&quot;;  }  } $suporte1 = new suporte(&quot;Os Intocáveis&quot;,22,3);  echo &quot;<b>”.$suporte1->titulo.&quot;</b>&quot;;  echo  &quot;<br>Preco:  “.$suporte1->dar_preco_sem_imposto().&quot;euros&quot;;  echo  &quot;<br>Preco  imposto  incluído:  “. $suporte1->dar_preco_com_imposto().&quot; euros&quot;;
Exemplo – Classe Fita de Vídeo class fita_video extends suporte{  private $duracao;  function __construct($tit,$num,$preco,$duracao){  parent::__construct($tit,$num,$preco);  $this->duracao = $duracao;  }  public function imprime_caracteristicas(){  echo &quot;Filme em VHS:<br>&quot;;  parent::imprime_caracteristicas();  echo &quot;<br>Duracao: &quot; . $this->duracao;  }  }
Exemplo – Classe Fita de Vídeo $minhafita  =  new  fita_video(&quot;Os  Outros&quot;,  22,  4.5, &quot;115minutos&quot;);  echo &quot;<b>&quot; . $minhafita->titulo . &quot;</b>&quot;;  echo &quot;<br>Preco: &quot; . $minhafita->dar_preco_sem_imposto() .&quot; euros&quot;;  echo  &quot;<br>Preco  IVA  incluido:  &quot;  .  $minhafita->dar_preco_com_iva() . &quot; euros&quot;;
Interfaces Interfaces permitem a criação de código que especifica quais métodos um classe  deve  implementar,  sem  ter  que  definir  como  esses  métodos  ser tratados.  Interfaces são definidas utilizando a palavra-chave  interface , e deve ter  definições  para  todos  os  métodos  listados  na  interface.  Classes  podem implementar  mais  de  uma  interface  se  desejarem  listando  cada  interface separada por um espaço.
Exemplo – Interface iNoticia interface iNoticia { public function setTitulo($valor); public function setTexto($valor); public function exibeNoticia(); }
Exemplo – Classe notícia include_once('noticia_interface.class.php'); class Noticia implements iNoticia { protected $titulo; protected $texto; public function setTitulo($valor) { $this->titulo = $valor; } public function setTexto($valor) { $this->texto = $valor; } public function exibeNoticia() { echo &quot;<center>&quot;; echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; echo  $this->texto; echo &quot;</center><p>&quot;; } }
Classes abstratas Classes abstratas são classes que não podem ser instanciadas diretamente, sendo  necessária  a  criação  de  uma  subclasse  para  conseguir  utilizar  suas características.  Isso  não  quer  dizer  que  os  métodos  destas  classes  também precisam  ser  abstratos.  Isso  é  opcional,  mas  propriedades  não  podem  ser definidas  como abstratas.
Exemplo – Classe abstrata Noticia abstract class Noticia { protected $titulo; protected $texto; public function setTitulo($valor) { $this->titulo = $valor; } abstract public function setTexto($valor); abstract public function exibeNoticia(); }
Exemplo – Classe Noticia Principal include_once('noticia_abstrata.class.php'); class NoticiaPrincipal extends Noticia { private $imagem; public function setTexto($valor) { $this->texto = $valor; } function setImagem($valor){ $this->imagem = $valor; } function exibeNoticia(){ echo &quot;<center>&quot;; echo &quot;<img src=\&quot;&quot;. $this->imagem .&quot;\&quot;><p>&quot;; echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; echo  $this->texto; echo &quot;</center><p>&quot;; } }
Exemplo - Aplicação $titulo = 'Vestibular termina nesta quarta-feira'; $texto  = 'Um dos maiores vestibulares do estado acaba nesta quarta-feira,'; $texto .= 'com número recorde de inscritos'; $imagem = ‘ufs.jpg'; $not = new NoticiaPrincipal; $not->setTitulo($titulo); $not->setTexto($texto); $not->setImagem($imagem); $not->exibeNoticia(); echo &quot;<pre>&quot;; print_r($not); echo &quot;</pre>&quot;;
PESQUISA – PRIMEIRA AVALIAÇÃO Pesquisem os seguintes tópicos: Destrutores Uso da palavra “final” Métodos e propriedades estáticos Métodos Mágicos Uso do “instanceof” Tratamento de exceção (Exception) Singleton
PROJETO – SEMANA II Definição dos Layers da Página: Definir e construir a arquitetura do sistema utilizando layers e implementar. Criação dos procedimentos de página: Realizar primeiras implementações Criação dos objetos a serem aplicados : Criar e implementar os objetos (com exceção do objeto de acesso a dados) que serão utilizados no projeto.
PROJETO – SEMANA II Horários de orientação: Segunda a quinta a tarde, a partir das 15h Sábado, a partir das 8h Outros horários a combinar. Data entrega por email: 19/02/2009, até às 20h Deve-se entregar os arquivos fontes e documento com uma descrição de como foram compridas as etapas solicitadas.

Aula5

  • 1.
    PHP ORIENTADO AOBJETOS Aula 5 – 11/02/2009 Instrutor: Nelson Luis Rodrigues Pereira
  • 2.
    Classes no PHPA estrutura de uma classe no PHP seguem o mesmo padrão de outras linguagens. Cada classe possui atributos e operações ligadas a ela. As classes no PHP possuem a seguinte estrutura: class classname { var $atributo1; var $atributo2; }
  • 3.
    Classes no PHPAs operações de uma classe são declaradas na forma de funções e podem ou não possuírem passagem de parâmetros ou valores de retornos. class classname { function operation1 () { } function operation2 ($param1, $param2) { } }
  • 4.
    Construtores Um construtoré chamado quando um objeto instancia uma classe para a realização de tarefas de inicialização da mesma. Um construtor é declarado como as outras operações mas o seu identificador deve ser o nome da classe. class classname { function classname () { } }
  • 5.
    Instanciar classes Ainstância da classe no PHP é semelhante a outras linguagens, usando-se da palavra reservada new e fazendo chamada ao construtor da classe. Lembrando que ao instanciar uma classe você está criando um objeto dessa classe. $a = new classname(); $b = new classname();
  • 6.
    Utilizando atributos declasses Para utilizar atributos de uma classe faz-se necessário o uso do operador de associatividade (->), que funciona como o ponto em outras linguagens, como Java. $a = new classname(); $a->attribute = ‘value’; Para utilizar atributos de uma classe em operações da própria classe, usa-se o operador this. function operation($param) { $this->attribute = $param; }
  • 7.
    Utilizando a atributosde classes Procure desenvolver os chamados métodos de retorno (Get) e de atribuição (Set) para atributos que serão usados constantemente.
  • 8.
    Chamando operações declasses Para chamar operações de uma classe faz-se necessário também o uso do operador de associatividade (->). $a = new classname(); $a->operation1(); $x = $a->operation2(12,’test’);
  • 9.
    Exemplo No nossoexemplo da loja de peças, crie duas classes: A primeira será a classe Peça. A segunda será a classe Loja. Modelemos juntos estas classes.
  • 10.
    Modificadores de acessoSão os conhecidos public, protected e private. PUBLIC: É o nível de acesso mais permissivo. Serve para indicar que o método ou atributo da classe é público. Neste caso pode-se acessar a este atributo, para visualizá-lo ou editá-lo, por qualquer outro elemento de nosso programa. É o modificador que se aplica caso não se indique outra coisa. PRIVATE: É o nível de acesso mais restritivo. Serve para indicar que essa variável somente vai poder ser acessada pelo próprio objeto, nunca de fora. Se tentarmos acessar um método ou atributo declarado private de fora do próprio objeto, obteremos uma mensagem de erro indicando que não é possível a este elemento. PROTECTED: é público dentro da própria classe e em suas heranças e privado para as demais classes.
  • 11.
    Exemplo 1 classdado{ public $pontos; function __construct(){ srand((double)microtime()*1000000); } public function tirar(){ $this->pontos=$randval = rand(1,6); } } $meu_dado = new dado(); for ($i=0;$i<30;$i++){ $meu_dado->tirar(); &quot;<br>Saiu &quot; . $meu_dado->pontos . &quot;pontos&quot;; }
  • 12.
    Exemplo 2 classdado{ private $pontos; function __construct(){ srand((double)microtime()*1000000); } private function tirar(){ $this->pontos=$randval = rand(1,6); } public function dar_nova_pontuacao(){ $this->tirar(); return $this->pontos; } } $meu_dado = new dado(); for ($i=0;$i<30;$i++) { &quot;<br>Han salido &quot; . $meu_dado->dar_nova_pontuacao() .&quot; pontos&quot;; }
  • 13.
    Herança de classesNo caso de uma classe ser subclasse de outra, utiliza-se da palavra reservada extends juntamente com a superclasse na assinatura da subclasse. Class B extends A { var $attribute2; function operation3(){ } } $b = new B(); $b->operation1(); $b->attribute1 = 10; $b->operation2(); $b->attribute2 = 10;
  • 14.
    Observações Em Herançaem PHP permite que seja implementado o conceito de sobrescrever métodos ou atributos que já existam na superclasse (overriding), sendo essa mudança considerada apenas nos objetos que instanciam a subclasse. O PHP não suporta o conceito de herança múltipla, ou seja, uma subclasse só pode herdar de uma única classe. Podem ser declaradas mais de uma classe num arquivo PHP, mas para que estas classes sejam usadas em outros arquivos, deve ser feita uma chamada a função include(‘Nome do arquivo que se localiza a classe’);
  • 15.
  • 16.
    Exemplos – ClasseSuporte class suporte{ public $titulo; protected $numero; private $preco; function __construct($tit,$num,$preco){ $this->titulo = $tit; $this->numero = $num; $this->preco = $preco; } public function dar_preco_sem_imposto(){ return $this->preco; } public function dar_preco_com_imposto(){ return $this->preco * 1.16; }
  • 17.
    Exemplos – ClasseSuporte public function dar_numero_identificacao(){ return $this->numero; } public function imprime_caracteristicas(){ echo $this->titulo; echo &quot;<br>&quot; . $this->preco . &quot; (imposto nao incluido)&quot;; } } $suporte1 = new suporte(&quot;Os Intocáveis&quot;,22,3); echo &quot;<b>”.$suporte1->titulo.&quot;</b>&quot;; echo &quot;<br>Preco: “.$suporte1->dar_preco_sem_imposto().&quot;euros&quot;; echo &quot;<br>Preco imposto incluído: “. $suporte1->dar_preco_com_imposto().&quot; euros&quot;;
  • 18.
    Exemplo – ClasseFita de Vídeo class fita_video extends suporte{ private $duracao; function __construct($tit,$num,$preco,$duracao){ parent::__construct($tit,$num,$preco); $this->duracao = $duracao; } public function imprime_caracteristicas(){ echo &quot;Filme em VHS:<br>&quot;; parent::imprime_caracteristicas(); echo &quot;<br>Duracao: &quot; . $this->duracao; } }
  • 19.
    Exemplo – ClasseFita de Vídeo $minhafita = new fita_video(&quot;Os Outros&quot;, 22, 4.5, &quot;115minutos&quot;); echo &quot;<b>&quot; . $minhafita->titulo . &quot;</b>&quot;; echo &quot;<br>Preco: &quot; . $minhafita->dar_preco_sem_imposto() .&quot; euros&quot;; echo &quot;<br>Preco IVA incluido: &quot; . $minhafita->dar_preco_com_iva() . &quot; euros&quot;;
  • 20.
    Interfaces Interfaces permitema criação de código que especifica quais métodos um classe deve implementar, sem ter que definir como esses métodos ser tratados. Interfaces são definidas utilizando a palavra-chave interface , e deve ter definições para todos os métodos listados na interface. Classes podem implementar mais de uma interface se desejarem listando cada interface separada por um espaço.
  • 21.
    Exemplo – InterfaceiNoticia interface iNoticia { public function setTitulo($valor); public function setTexto($valor); public function exibeNoticia(); }
  • 22.
    Exemplo – Classenotícia include_once('noticia_interface.class.php'); class Noticia implements iNoticia { protected $titulo; protected $texto; public function setTitulo($valor) { $this->titulo = $valor; } public function setTexto($valor) { $this->texto = $valor; } public function exibeNoticia() { echo &quot;<center>&quot;; echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; echo $this->texto; echo &quot;</center><p>&quot;; } }
  • 23.
    Classes abstratas Classesabstratas são classes que não podem ser instanciadas diretamente, sendo necessária a criação de uma subclasse para conseguir utilizar suas características. Isso não quer dizer que os métodos destas classes também precisam ser abstratos. Isso é opcional, mas propriedades não podem ser definidas como abstratas.
  • 24.
    Exemplo – Classeabstrata Noticia abstract class Noticia { protected $titulo; protected $texto; public function setTitulo($valor) { $this->titulo = $valor; } abstract public function setTexto($valor); abstract public function exibeNoticia(); }
  • 25.
    Exemplo – ClasseNoticia Principal include_once('noticia_abstrata.class.php'); class NoticiaPrincipal extends Noticia { private $imagem; public function setTexto($valor) { $this->texto = $valor; } function setImagem($valor){ $this->imagem = $valor; } function exibeNoticia(){ echo &quot;<center>&quot;; echo &quot;<img src=\&quot;&quot;. $this->imagem .&quot;\&quot;><p>&quot;; echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; echo $this->texto; echo &quot;</center><p>&quot;; } }
  • 26.
    Exemplo - Aplicação$titulo = 'Vestibular termina nesta quarta-feira'; $texto = 'Um dos maiores vestibulares do estado acaba nesta quarta-feira,'; $texto .= 'com número recorde de inscritos'; $imagem = ‘ufs.jpg'; $not = new NoticiaPrincipal; $not->setTitulo($titulo); $not->setTexto($texto); $not->setImagem($imagem); $not->exibeNoticia(); echo &quot;<pre>&quot;; print_r($not); echo &quot;</pre>&quot;;
  • 27.
    PESQUISA – PRIMEIRAAVALIAÇÃO Pesquisem os seguintes tópicos: Destrutores Uso da palavra “final” Métodos e propriedades estáticos Métodos Mágicos Uso do “instanceof” Tratamento de exceção (Exception) Singleton
  • 28.
    PROJETO – SEMANAII Definição dos Layers da Página: Definir e construir a arquitetura do sistema utilizando layers e implementar. Criação dos procedimentos de página: Realizar primeiras implementações Criação dos objetos a serem aplicados : Criar e implementar os objetos (com exceção do objeto de acesso a dados) que serão utilizados no projeto.
  • 29.
    PROJETO – SEMANAII Horários de orientação: Segunda a quinta a tarde, a partir das 15h Sábado, a partir das 8h Outros horários a combinar. Data entrega por email: 19/02/2009, até às 20h Deve-se entregar os arquivos fontes e documento com uma descrição de como foram compridas as etapas solicitadas.