O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Java7
Java7
Carregando em…3
×

Confira estes a seguir

1 de 29 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Anúncio

Semelhante a Aula5 (20)

Anúncio

Mais recentes (20)

Aula5

  1. 1. PHP ORIENTADO A OBJETOS Aula 5 – 11/02/2009 Instrutor: Nelson Luis Rodrigues Pereira
  2. 2. Classes no PHP <ul><li>A estrutura de uma classe no PHP seguem o mesmo padrão de outras linguagens. </li></ul><ul><li>Cada classe possui atributos e operações ligadas a ela. </li></ul><ul><li>As classes no PHP possuem a seguinte estrutura: </li></ul><ul><li>class classname </li></ul><ul><li>{ </li></ul><ul><li>var $atributo1; </li></ul><ul><li>var $atributo2; </li></ul><ul><li>} </li></ul>
  3. 3. Classes no PHP <ul><li>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. </li></ul><ul><li>class classname </li></ul><ul><li>{ </li></ul><ul><li>function operation1 () { } </li></ul><ul><li>function operation2 ($param1, $param2) { } </li></ul><ul><li>} </li></ul>
  4. 4. Construtores <ul><li>Um construtor é chamado quando um objeto instancia uma classe para a realização de tarefas de inicialização da mesma. </li></ul><ul><li>Um construtor é declarado como as outras operações mas o seu identificador deve ser o nome da classe. </li></ul><ul><li>class classname </li></ul><ul><li>{ </li></ul><ul><li>function classname () { } </li></ul><ul><li>} </li></ul>
  5. 5. Instanciar classes <ul><li>A instância da classe no PHP é semelhante a outras linguagens, usando-se da palavra reservada new e fazendo chamada ao construtor da classe. </li></ul><ul><li>Lembrando que ao instanciar uma classe você está criando um objeto dessa classe. </li></ul><ul><li>$a = new classname(); </li></ul><ul><li>$b = new classname(); </li></ul>
  6. 6. Utilizando atributos de classes <ul><li>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. </li></ul><ul><li>$a = new classname(); </li></ul><ul><li>$a->attribute = ‘value’; </li></ul><ul><li>Para utilizar atributos de uma classe em operações da própria classe, usa-se o operador this. </li></ul><ul><li>function operation($param) { </li></ul><ul><li>$this->attribute = $param; </li></ul><ul><li>} </li></ul>
  7. 7. Utilizando a atributos de classes <ul><li>Procure desenvolver os chamados métodos de retorno (Get) e de atribuição (Set) para atributos que serão usados constantemente. </li></ul>
  8. 8. Chamando operações de classes <ul><li>Para chamar operações de uma classe faz-se necessário também o uso do operador de associatividade (->). </li></ul><ul><li>$a = new classname(); </li></ul><ul><li>$a->operation1(); </li></ul><ul><li>$x = $a->operation2(12,’test’); </li></ul>
  9. 9. Exemplo <ul><li>No nosso exemplo da loja de peças, crie duas classes: </li></ul><ul><ul><li>A primeira será a classe Peça. </li></ul></ul><ul><ul><li>A segunda será a classe Loja. </li></ul></ul><ul><ul><li>Modelemos juntos estas classes. </li></ul></ul>
  10. 10. Modificadores de acesso <ul><li>São os conhecidos public, protected e private. </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul><ul><li>PROTECTED: é público dentro da própria classe e em suas heranças e privado para as demais classes. </li></ul>
  11. 11. Exemplo 1 <ul><li>class dado{ </li></ul><ul><li>public $pontos; </li></ul><ul><li>function __construct(){ </li></ul><ul><li>srand((double)microtime()*1000000); </li></ul><ul><li>} </li></ul><ul><li>public function tirar(){ </li></ul><ul><li>$this->pontos=$randval = rand(1,6); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>$meu_dado = new dado(); </li></ul><ul><li>for ($i=0;$i<30;$i++){ </li></ul><ul><li>$meu_dado->tirar(); </li></ul><ul><li>&quot;<br>Saiu &quot; . $meu_dado->pontos . &quot;pontos&quot;; </li></ul><ul><li>} </li></ul>
  12. 12. Exemplo 2 <ul><li>class dado{ </li></ul><ul><li>private $pontos; </li></ul><ul><li>function __construct(){ </li></ul><ul><li>srand((double)microtime()*1000000); </li></ul><ul><li>} </li></ul><ul><li>private function tirar(){ </li></ul><ul><li>$this->pontos=$randval = rand(1,6); </li></ul><ul><li>} </li></ul><ul><li>public function dar_nova_pontuacao(){ </li></ul><ul><li>$this->tirar(); </li></ul><ul><li>return $this->pontos; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>$meu_dado = new dado(); </li></ul><ul><li>for ($i=0;$i<30;$i++) { </li></ul><ul><li>&quot;<br>Han salido &quot; . $meu_dado->dar_nova_pontuacao() .&quot; pontos&quot;; } </li></ul>
  13. 13. Herança de classes <ul><li>No caso de uma classe ser subclasse de outra, utiliza-se da palavra reservada extends juntamente com a superclasse na assinatura da subclasse. </li></ul><ul><li>Class B extends A { </li></ul><ul><li>var $attribute2; </li></ul><ul><li>function operation3(){ } </li></ul><ul><li>} </li></ul><ul><li>$b = new B(); </li></ul><ul><li>$b->operation1(); </li></ul><ul><li>$b->attribute1 = 10; </li></ul><ul><li>$b->operation2(); </li></ul><ul><li>$b->attribute2 = 10; </li></ul>
  14. 14. Observações <ul><li>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. </li></ul><ul><li>O PHP não suporta o conceito de herança múltipla, ou seja, uma subclasse só pode herdar de uma única classe. </li></ul><ul><li>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’); </li></ul>
  15. 15. Exemplos Herança
  16. 16. Exemplos – Classe Suporte <ul><li>class suporte{ </li></ul><ul><li>public $titulo; </li></ul><ul><li>protected $numero; </li></ul><ul><li>private $preco; </li></ul><ul><li>function __construct($tit,$num,$preco){ </li></ul><ul><li>$this->titulo = $tit; </li></ul><ul><li>$this->numero = $num; </li></ul><ul><li>$this->preco = $preco; </li></ul><ul><li>} </li></ul><ul><li>public function dar_preco_sem_imposto(){ </li></ul><ul><li>return $this->preco; </li></ul><ul><li>} </li></ul><ul><li>public function dar_preco_com_imposto(){ </li></ul><ul><li>return $this->preco * 1.16; </li></ul><ul><li>} </li></ul>
  17. 17. Exemplos – Classe Suporte <ul><li>public function dar_numero_identificacao(){ </li></ul><ul><li>return $this->numero; </li></ul><ul><li>} </li></ul><ul><li>public function imprime_caracteristicas(){ </li></ul><ul><li>echo $this->titulo; </li></ul><ul><li>echo &quot;<br>&quot; . $this->preco . &quot; (imposto nao incluido)&quot;; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>$suporte1 = new suporte(&quot;Os Intocáveis&quot;,22,3); </li></ul><ul><li>echo &quot;<b>”.$suporte1->titulo.&quot;</b>&quot;; </li></ul><ul><li>echo &quot;<br>Preco: “.$suporte1->dar_preco_sem_imposto().&quot;euros&quot;; </li></ul><ul><li>echo &quot;<br>Preco imposto incluído: “. </li></ul><ul><li>$suporte1->dar_preco_com_imposto().&quot; euros&quot;; </li></ul>
  18. 18. Exemplo – Classe Fita de Vídeo <ul><li>class fita_video extends suporte{ </li></ul><ul><li>private $duracao; </li></ul><ul><li>function __construct($tit,$num,$preco,$duracao){ </li></ul><ul><li>parent::__construct($tit,$num,$preco); </li></ul><ul><li>$this->duracao = $duracao; </li></ul><ul><li>} </li></ul><ul><li>public function imprime_caracteristicas(){ </li></ul><ul><li>echo &quot;Filme em VHS:<br>&quot;; </li></ul><ul><li>parent::imprime_caracteristicas(); </li></ul><ul><li>echo &quot;<br>Duracao: &quot; . $this->duracao; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. Exemplo – Classe Fita de Vídeo <ul><li>$minhafita = new fita_video(&quot;Os Outros&quot;, 22, 4.5, </li></ul><ul><li>&quot;115minutos&quot;); </li></ul><ul><li>echo &quot;<b>&quot; . $minhafita->titulo . &quot;</b>&quot;; </li></ul><ul><li>echo &quot;<br>Preco: &quot; . $minhafita->dar_preco_sem_imposto() .&quot; </li></ul><ul><li>euros&quot;; </li></ul><ul><li>echo &quot;<br>Preco IVA incluido: &quot; . </li></ul><ul><li>$minhafita->dar_preco_com_iva() . &quot; euros&quot;; </li></ul>
  20. 20. Interfaces <ul><li>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. </li></ul><ul><li>Interfaces são definidas utilizando a palavra-chave interface , e deve ter definições para todos os métodos listados na interface. </li></ul><ul><li>Classes podem implementar mais de uma interface se desejarem listando cada interface separada por um espaço. </li></ul>
  21. 21. Exemplo – Interface iNoticia <ul><li>interface iNoticia </li></ul><ul><li>{ </li></ul><ul><li>public function setTitulo($valor); </li></ul><ul><li>public function setTexto($valor); </li></ul><ul><li>public function exibeNoticia(); </li></ul><ul><li>} </li></ul>
  22. 22. Exemplo – Classe notícia <ul><li>include_once('noticia_interface.class.php'); </li></ul><ul><li>class Noticia implements iNoticia </li></ul><ul><li>{ </li></ul><ul><li>protected $titulo; </li></ul><ul><li>protected $texto; </li></ul><ul><li>public function setTitulo($valor) </li></ul><ul><li>{ </li></ul><ul><li>$this->titulo = $valor; </li></ul><ul><li>} </li></ul><ul><li>public function setTexto($valor) </li></ul><ul><li>{ </li></ul><ul><li>$this->texto = $valor; </li></ul><ul><li>} </li></ul><ul><li>public function exibeNoticia() </li></ul><ul><li>{ </li></ul><ul><li>echo &quot;<center>&quot;; </li></ul><ul><li>echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; </li></ul><ul><li>echo $this->texto; </li></ul><ul><li>echo &quot;</center><p>&quot;; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  23. 23. Classes abstratas <ul><li>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. </li></ul><ul><li>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. </li></ul>
  24. 24. Exemplo – Classe abstrata Noticia <ul><li>abstract class Noticia </li></ul><ul><li>{ </li></ul><ul><li>protected $titulo; </li></ul><ul><li>protected $texto; </li></ul><ul><li>public function setTitulo($valor) </li></ul><ul><li>{ </li></ul><ul><li>$this->titulo = $valor; </li></ul><ul><li>} </li></ul><ul><li>abstract public function setTexto($valor); </li></ul><ul><li>abstract public function exibeNoticia(); </li></ul><ul><li>} </li></ul>
  25. 25. Exemplo – Classe Noticia Principal <ul><li>include_once('noticia_abstrata.class.php'); </li></ul><ul><li>class NoticiaPrincipal extends Noticia </li></ul><ul><li>{ </li></ul><ul><li>private $imagem; </li></ul><ul><li>public function setTexto($valor) { </li></ul><ul><li>$this->texto = $valor; </li></ul><ul><li>} </li></ul><ul><li>function setImagem($valor){ </li></ul><ul><li>$this->imagem = $valor; </li></ul><ul><li>} </li></ul><ul><li>function exibeNoticia(){ </li></ul><ul><li>echo &quot;<center>&quot;; </li></ul><ul><li>echo &quot;<img src=amp;quot;&quot;. $this->imagem .&quot;amp;quot;><p>&quot;; </li></ul><ul><li>echo &quot;<b>&quot;. $this->titulo .&quot;</b><p>&quot;; </li></ul><ul><li>echo $this->texto; </li></ul><ul><li>echo &quot;</center><p>&quot;; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  26. 26. Exemplo - Aplicação <ul><li>$titulo = 'Vestibular termina nesta quarta-feira'; </li></ul><ul><li>$texto = 'Um dos maiores vestibulares do estado acaba nesta quarta-feira,'; </li></ul><ul><li>$texto .= 'com número recorde de inscritos'; </li></ul><ul><li>$imagem = ‘ufs.jpg'; </li></ul><ul><li>$not = new NoticiaPrincipal; </li></ul><ul><li>$not->setTitulo($titulo); </li></ul><ul><li>$not->setTexto($texto); </li></ul><ul><li>$not->setImagem($imagem); </li></ul><ul><li>$not->exibeNoticia(); </li></ul><ul><li>echo &quot;<pre>&quot;; </li></ul><ul><li>print_r($not); </li></ul><ul><li>echo &quot;</pre>&quot;; </li></ul>
  27. 27. PESQUISA – PRIMEIRA AVALIAÇÃO <ul><li>Pesquisem os seguintes tópicos: </li></ul><ul><ul><li>Destrutores </li></ul></ul><ul><ul><li>Uso da palavra “final” </li></ul></ul><ul><ul><li>Métodos e propriedades estáticos </li></ul></ul><ul><ul><li>Métodos Mágicos </li></ul></ul><ul><ul><li>Uso do “instanceof” </li></ul></ul><ul><ul><li>Tratamento de exceção (Exception) </li></ul></ul><ul><ul><li>Singleton </li></ul></ul>
  28. 28. PROJETO – SEMANA II <ul><li>Definição dos Layers da Página: Definir e construir a arquitetura do sistema utilizando layers e implementar. </li></ul><ul><li>Criação dos procedimentos de página: Realizar primeiras implementações </li></ul><ul><li>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. </li></ul>
  29. 29. PROJETO – SEMANA II <ul><li>Horários de orientação: </li></ul><ul><ul><li>Segunda a quinta a tarde, a partir das 15h </li></ul></ul><ul><ul><li>Sábado, a partir das 8h </li></ul></ul><ul><ul><li>Outros horários a combinar. </li></ul></ul><ul><li>Data entrega por email: 19/02/2009, até às 20h </li></ul><ul><li>Deve-se entregar os arquivos fontes e documento com uma descrição de como foram compridas as etapas solicitadas. </li></ul>

×