29
PHP ORIENTADO A OBJETOS Aula 5 – 11/02/2009 Instrutor: Nelson Luis Rodrigues Pereira

Aula5

  • Upload
    softeam

  • View
    586

  • Download
    4

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Aula5

PHP ORIENTADO A OBJETOSAula 5 – 11/02/2009

Instrutor: Nelson Luis Rodrigues Pereira

Page 2: Aula5

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;

}

Page 3: Aula5

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) { }

}

Page 4: Aula5

ConstrutoresUm 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 () { }}

Page 5: Aula5

Instanciar classesA 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();

Page 6: Aula5

Utilizando atributos de classesPara 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;

}

Page 7: Aula5

Utilizando a atributos de classesProcure desenvolver os chamados métodos

de retorno (Get) e de atribuição (Set) para atributos que serão usados constantemente.

Page 8: Aula5

Chamando operações de classesPara 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’);

Page 9: Aula5

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.

Page 10: Aula5

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.

Page 11: Aula5

Exemplo 1class 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(); "<br>Saiu " . $meu_dado->pontos . "pontos"; }

Page 12: Aula5

Exemplo 2class 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++) { "<br>Han salido " . $meu_dado->dar_nova_pontuacao() ." pontos";

}

Page 13: Aula5

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;

Page 14: Aula5

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’);

Page 15: Aula5

Exemplos Herança

Page 16: Aula5

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; }

Page 17: Aula5

Exemplos – Classe Suportepublic function dar_numero_identificacao(){

return $this->numero;

}

public function imprime_caracteristicas(){

echo $this->titulo;

echo "<br>" . $this->preco . " (imposto nao incluido)";

}

}

$suporte1 = new suporte("Os Intocáveis",22,3);

echo "<b>”.$suporte1->titulo."</b>";

echo "<br>Preco: “.$suporte1->dar_preco_sem_imposto()."euros";

echo "<br>Preco imposto incluído: “.

$suporte1->dar_preco_com_imposto()." euros";

Page 18: Aula5

Exemplo – Classe Fita de Vídeoclass 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 "Filme em VHS:<br>";

parent::imprime_caracteristicas();

echo "<br>Duracao: " . $this->duracao;

}

}

Page 19: Aula5

Exemplo – Classe Fita de Vídeo$minhafita = new fita_video("Os Outros", 22, 4.5,

"115minutos");

echo "<b>" . $minhafita->titulo . "</b>";

echo "<br>Preco: " . $minhafita->dar_preco_sem_imposto() ."

euros";

echo "<br>Preco IVA incluido: " .

$minhafita->dar_preco_com_iva() . " euros";

Page 20: Aula5

InterfacesInterfaces 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.

Page 21: Aula5

Exemplo – Interface iNoticiainterface iNoticia

{

public function setTitulo($valor);

public function setTexto($valor);

public function exibeNoticia();

}

Page 22: Aula5

Exemplo – Classe notíciainclude_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 "<center>";echo "<b>". $this->titulo ."</b><p>";echo $this->texto;echo "</center><p>";

}}

Page 23: Aula5

Classes abstratasClasses 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.

Page 24: Aula5

Exemplo – Classe abstrata Noticiaabstract class Noticia

{

protected $titulo;

protected $texto;

public function setTitulo($valor)

{

$this->titulo = $valor;

}

abstract public function setTexto($valor);

abstract public function exibeNoticia();

}

Page 25: Aula5

Exemplo – Classe Noticia Principalinclude_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 "<center>";echo "<img src=\"". $this->imagem ."\"><p>";echo "<b>". $this->titulo ."</b><p>";echo $this->texto;

echo "</center><p>";}

}

Page 26: Aula5

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 "<pre>";

print_r($not);

echo "</pre>";

Page 27: Aula5

PESQUISA – PRIMEIRA AVALIAÇÃOPesquisem os seguintes tópicos:

DestrutoresUso da palavra “final”Métodos e propriedades estáticosMétodos MágicosUso do “instanceof”Tratamento de exceção (Exception)Singleton

Page 28: Aula5

PROJETO – SEMANA IIDefiniçã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.

28

Page 29: Aula5

PROJETO – SEMANA IIHorários de orientação:

Segunda a quinta a tarde, a partir das 15hSábado, a partir das 8hOutros 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.

29