• Nenhum resultado encontrado

PHP INTRODUÇÃO CLASSES E OBJETOS

N/A
N/A
Protected

Academic year: 2021

Share "PHP INTRODUÇÃO CLASSES E OBJETOS"

Copied!
13
0
0

Texto

(1)

PHP

AULA 8

ORIENTAÇÃO A OBJETOS

Professor: Leonardo Pereira E-mail: [email protected]

Facebook: leongamerti

Material de Estudo: http://www.leonti.vv.si

I

NTRODUÇÃO

A orientação a objetos ou OO é o paradigma mais utilizado para construção de sistema.

Em vez de construir um sistema formado por um conjunto de funções e variáveis nem sempre agrupadas de acordo com o contexto, na OO utilizamos uma ótica mais próxima do mundo real. Lidamos com objetos, estruturas que já

conhecemos do nosso dia-a-dia e sobre as quais possuímos maior compreensão.

C

LASSES E

O

BJETOS

Ao trabalharmos com orientação a objetos é fundamental entender o conceitos de classes e objetos.

Uma classe é uma estrutura que define um tipo de dados, podendo conter atributos e também métodos para manipular esses atributos.

Pense em uma classe como um “molde” para criar (instanciar) objetos.

C

LASSES E

O

BJETOS

Vamos declarar uma classe chamada Produto com 4 propriedades.

Uma propriedade é uma variável que existe dentro do contexto de um objeto.

Para declarar uma classe usamos a palavra chave class.

Para declarar uma propriedade usamos a palavra chave var.

(2)

C

LASSE

P

RODUTO <?php class Produto{ var $codigo; var $descricao; var $preco; var $quantidade; } ?>

C

LASSES E

O

BJETOS

Um objeto contém exatamente a mesma estrutura de uma classe.

Por isso que falamos que a classe é o molde para um objeto.

No entanto, sua estrutura é dinâmica.

Seus atributos podem mudar de valor durante a execução do programa e podemos declarar diversos objetos oriundos de uma mesma classe. A classe é apenas o código fonte.

O objeto é um pedaço de um programa em execução na CPU e residente na memoria principal.

I

NCLUINDO

C

ÓDIGO

Para que um script contido em um arquivo separado possa ser usado, devemos chamá-lo utilizando uma das 4 funções abaixo:

 include  include_once  require  require_once

I

NCLUINDO

C

ÓDIGO

include: inclui um arquivo no escopo do programa tornando-se disponível a partir da linha em que a inclusão ocorre produzindo uma mensagem de advertência (warning) caso o arquivo não exista. include_once: funciona parecido com o include,

porém só inclui o arquivo apenas uma vez, sendo útil em casos em que programa pode passar mais de uma vez pela instrução.

require: similar ao include porém produz um erro fatal parando o processamento do código caso o arquivo não exista.

require_once: similar ao require, porém o arquivo só é incluído uma única vez.

(3)

C

LASSES E

O

BJETOS

<?php

include_once "classes/Produto.class.php"; $p = new Produto;

$p->codigo = 1000;

$p->descricao = "Mouse sem fio"; echo $p->codigo;

echo $p->descricao; ?>

C

LASSES E

O

BJETOS

No exemplo primeiro importamos o código fonte da classe Produto usamos a função include. Depois criamos um objeto da classe Produto

usando o operador new seguido do nome da classe.

Para acessar as propriedades de um objeto em nosso programa, utilizamos o nome da

propriedade sem o $ precedido do nome do objeto.

M

ÉTODOS

Agora vamos adicionar um método que é uma função declarada dentro da estrutura da classe. O método etiqueta() trabalha com as

propriedades do objeto.

Para diferenciar as propriedades de um objeto de variáveis locais, utiliza-se a pseudovariavel $thispara referenciar as propriedades do objeto que está executando o método.

M

ÉTODOS <?php class Produto{ var $codigo; var $descricao; var $preco; var $quantidade; function etiqueta(){

echo "$this->codigo - $this->descricao"; }

} ?>

(4)

E

XECUTANDO UM

M

ÉTODO

<?php

include_once "classes/Produto.class.php"; $p = new Produto;

$p->codigo = 1000;

$p->descricao = "Mouse sem fio"; $p->etiqueta();

?>

// Saída é : 1000 – Mouse sem fio

Para executar um método é bem parecido com a atribuição de valor a uma propriedade.

C

LASSE

É uma estrutura estática utilizada para

descrever objetos mediante atributos e métodos. A classe é um modelo para criação de objetos. Ao modelarmos uma classe Pessoa, suas

propriedades podem ser: nome, altura, idade, escolaridade e etc.

Os métodos são as funcionalidades desempenhadas pela casse.

No caso da classe Pessoa podemos ter os métodos falar(), crescer(), correr(), andar().

O

BJETO

Um objeto é uma estrutura dinâmica originada com base em uma classe.

Um objeto também é conhecido como instancia de uma classe, porque o objeto existe durante um dado instante de tempo que vai da sua criação ate a sua destruição.

Podemos ter diversos objetos da classe Pessoa sendo que cada um pode possuir um valor diferente para suas respectivas propriedades.

M

ÉTODO COM

R

ETORNO <?php class Produto{ var $codigo; var $descricao; var $preco; var $quantidade; function etiqueta(){

echo "$this->codigo - $this->descricao"; }

function desconto($desconto){ $desconto = $desconto / 100; return $this->preco * $desconto; }

} ?>

(5)

M

ÉTODO COM

R

ETORNO

Um método pode retornar um valor quando for executado.

Para isso usamos a palavra return da mesma forma que usamos quando criamos uma função comum.

No final da execução do método, a instrução return devolve um determinado conteúdo para o chamador do método.

M

ÉTODO COM

R

ETORNO

<?php

include_once "classes/Produto.class.php"; $p = new Produto;

$p->codigo = 1000;

$p->descricao = "Mouse sem fio"; $p->preco = 700;

echo “{$p->desconto(20)} reais”; ?>

 Saída: 140 reais.

 O método desconto possui retorno por isso que usamos o

echo.

 Ao executar um método entre aspas duplas é necessário

colocar a declaração entre chaves { }.

C

ONSTRUTORES

Um construtor é um método especial usado para definir o comportamento inicial de um objeto. É executado automaticamente no momento em

que instanciamos um objeto por meio do operador new.

Não se deve retornar nenhum valor por meio deste método porque o seu retorno é o próprio objeto que está sendo instanciado.

Caso não seja definido um método construtor, automaticamente todas as propriedades do objeto criado são inicializados com NULL.

Para definir um método construtor declaramos o método __construct();

C

ONSTRUTORES <?php class Produto{ var $quantidade; function __construct(){ $this->quantidade = 100; } } ?>

(6)

C

ONSTRUTORES <?php include_once "classes/Produto.class.php"; $p = new Produto; echo $p->quantidade; ?>  Saída é: 100

 Agora, todo objeto criado possui inicial como quantidade o valor 100.

D

ESTRUTORES

Um destrutor ou finalizador é um método especial executado automaticamente quando o objeto é retirado da memória..

Isso ocorre nos seguintes casos:

 quando atribuímos o valor NULL ao objeto  quando usamos a função unset() sobre o objeto  quando o programa é finalizado.

Para definir um método destrutor em uma classe basta declarar o método __destruct().

D

ESTRUTORES <?php class Produto{ var $codigo; var $descricao; function etiqueta(){

echo "$this->codigo - $this->descricao"; }

function __destruct(){

echo "Objeto destruído"; } } ?>

D

ESTRUTORES <?php include_once "classes/Produto.class.php"; $p = new Produto; $p->codigo = 100;

$p->descricao = "Mouse sem fio"; echo $p->etiqueta();

?>

 Saída é: 100 - Mouse sem fio Objeto destruído

 A mensagem objeto destruído foi executado quando o script chegou no ponto ?>.

(7)

E

NCAPSULAMENTO

 É um mecanismo que fornece proteção de acesso aos membros internos de um objeto.

 Existem certas propriedades de uma classe que devem ser tratadas exclusivamente por métodos dela mesma, que são implementações projetadas para manipular essas propriedades de forma correta.

 As propriedades nunca devem ser acessadas

diretamente de forma do escopo de uma classe, pois dessa forma a classe não fornece mais garantias sobre os atributos que contem, perdendo, assim a responsabilidade sobre ele.

 Os métodos devem ser projetados de forma a

protegerem suas propriedades, fornecendo interfaces para a manipulação destas.

E

NCAPSULAMENTO

Para atingir o encapsulamento, podemos definir a visibilidade das propriedades e dos métodos de um objeto.

Existem 3 formas de acesso:

 private: membros declarados como private somente podem ser acessados dentro da própria classe.  protected: somente podem ser acessados dentro da

própria classe em que foram declarado e partir de classes filhas.

 public: podem ser acessados livremente.

H

ERANÇA

O uso da OO nos orienta em direção a uma maior organização de código, mas um dos maiores benefícios que encontramos na utilização desse paradigma é a possibilidade de reutilizar partes de código já definidas fornece maior agilidade no dia-a-dia.

Através da herança eliminamos a necessidade de eventuais duplicações ou reescritas de código.

H

ERANÇA

Uma herança cria uma arvore genealógica onde as classes inferiores da hierarquia herdam todas as propriedades e os métodos das classes

superiores, chamadas de superclasses. Este recurso tem uma aplicabilidade muito

grande, visto que é relativamente comum termos de criar novas funcionalidades em software. Utilizando a herança, em vez de criamos uma

estrutura totalmente nova, podemos reaproveitar uma estrutura já existente que nos fornece uma base abstrata para o desenvolvimento, provendo recursos básicos e comuns.

(8)

H

ERANÇA

Vamos criar uma classe genérica chamada Funcionário e aproveitar seu código fonte para criar uma classe mais específica chamada e Médico.

C

LASSE

F

UNCIONÁRIO <?php class Funcionario{ protected $nome; protected $salario;

public function setNome($n){ $this->nome = $n; }

public function getNome(){ return $this->nome; }

public function setSalario($s){ $this->salario = $s; }

public function getSalario(){ return $this->salario; } } ?>

C

LASSE

M

EDICO <?php include_once "classes/Funcionario.class.php"; class Medico extends Funcionario{

private $crm;

public function setCRM($c){ $this->crm = $c; }

public function getCRM(){ return $this->crm; }

public function cracha(){

echo "$this->nome - $this->crm"; }

public function getSalario(){ return $this->salario * 1.1; // return parent::getSalario() * 1.1; } } ?>

C

LASSE

E

NGENHEIRO <?php include_once "classes/Funcionario.class.php"; class Engenheiro extends Funcionario{

private $crea;

public function setCREA($c){ $this->crea = $c; }

public function getCREA(){ return $this->crea; }

public function cracha(){

echo "$this->nome - $this->crea"; }

} ?>

(9)

H

ERANÇA <?php include_once "classes/Medico.class.php"; include_once "classes/Engenheiro.class.php"; $m = new Medico(); $m->setNome("Patricia Silva"); $m->setCRM("331245-0"); $m->setSalario(1000); $m->cracha(); echo "<br>"; $e = new Engenheiro(); $e->setNome("Vitor Mendes"); $e->setCREA("123456-9"); $e->setSalario(1000); $e->cracha(); ?>

S

OBRESCRITA OU

O

VERRIDING

 Ocorre quando modificamos o comportamento de um

método da classe pai na filha adicionando uma nova funcionalidade.

 Temos um exemplo de sobrescrita na classe Medico quando

está sobrescreve a implementação de getSalario() herdada da superclasse Funcionário.

 Nela, o salario é aumentado em 10%.

 Vale ressaltar que na classe Engenheiro não ocorre esse

procedimento.

 Se for necessário chamar um método da classe mãe

podemos usar o parent.

 A linha comentada em getSalario() realizada o mesmo

trabalho que a linha está acima porem chamando o getSalario() da superclasse.

 Como temos apenas um único método com varias

implementações diferentes temos aqui presente o mecanismo chamado polimorfismo.

S

OBRESCRITA OU

O

VERRIDING <?php include_once "classes/Medico.class.php"; include_once "classes/Engenheiro.class.php"; $m = new Medico(); $m->setNome("Henrique"); $m->setSalario(1000); echo $m->getNome(); echo $m->getSalario(); echo "<br>"; $e = new Engenheiro(); $e->setNome("Leonardo"); $e->setSalario(1000); echo $e->getNome(); echo $e->getSalario(); ?> Saída: Henrique 1100 Leonardo 1000

C

LASSES

A

BSTRATAS

 São classes estruturais, ou seja, que estão na hierarquia de classes para servirem de base para outras classes.

 São classes que nunca serão instanciadas na forma de objetos.

 Somente suas classes filhas permitiram a criação de objetos.

 Para isso, devemos marcar essas classes como classes abstratas para impedir que sejam criados objetos a partir delas.

 Se marcarmos a classe funcionário como abstract, ou seja, abstract class Funcionario, somente poderemos criar objetos a partir de Medico e Engenheiro.

(10)

M

ÉTODOS

A

BSTRATOS

Consiste na definição de uma assinatura na classe abstrata.

Este método deverá conter uma implementação na classe filha, mas não deve possuir uma implementação na classe em que ele é definido. Métodos abstratos só existem em classes

abstratas.

C

LASSES

F

INAIS

Uma classe marcado como final não pode ser uma superclasse, ou seja, não pode ser base em uma estrutura de herança.

Para criar uma classe folha basta inserir a palavra final na declaração da classe.

M

ÉTODOS

F

INAIS

Um método final não pode ser sobrescrito, ou seja, não pode ser redefinido na classe-filha. Para marcar um método como final, basta utilizar

o operador final no inicio da sua declaração.

C

ONSTANTES

Para criar uma constante usamos o operador conste seu acesso de forma externa ao contexto da classe é feito pela sintaxe:

NomeDaClasse::NomeDaConstante. Dentro da classe é feito pela sintaxe

self::NomeDaConstante.

(11)

M

ÉTODOS

E

STÁTICOS

Podem ser invocados diretamente da classe, sem a necessidade de instanciar um objeto para isso. Ele não devem referenciar propriedades internas

pelo operador $this, porque este operador é utilizado para referenciar instancias da classe, mas não a própria classe.

Podem chamar apenas outros métodos estáticos da classe ou utilizar apenas propriedades

estáticas e constantes de classe.

Para executar um método estático, basta utilizar a sintaxe NomeDaClasse:NomeDoMétodo().

C

LASSE

C

ALCULADORA

<?php

class Calculadora{

constpi = 3.14; // constante staticfunction soma($a, $b){

return $a + $b; }

staticfunction subtracao($a, $b){ return $a - $b; }

staticfunction multiplicacao($a, $b){ return $a * $b; }

staticfunction divisao($a, $b){ return $a / $b; }

staticfunction areaCirculo($raio){

return 2 * self::pi * $raio * $raio; } } ?>

E

XEMPLO <?php include_once "classes/Calculadora.class.php"; echo Calculadora::pi; echo Calculadora::soma(4,2); echo Calculadora::subtracao(4,2); echo Calculadora::multiplicacao(4,2); echo Calculadora::divisao(4,2); echo Calculadora::areaCirculo(1); ?>

P

ROPRIEDADES

E

STÁTICAS

São atributos de uma classe sendo dinâmicas como as propriedades de um objeto, mas estão relacionados a classe.

Como a classe é a estrutura comum a todos os objetos dela derivados, propriedades estáticas são compartilhadas entre todos os objetos de uma classe.

Para fazer referencia à propriedade estática dentro da classe também usamos o self.

(12)

C

LASSE

P

RODUTO <?php class Produto{ static $quantidade; function __construct(){ self::$quantidade = self::$quantidade + 1; } } ?>

E

XEMPLO <?php include_once "classes/Produto.class.php"; $a = new Produto; $b = new Produto; $c = new Produto; echo Produto::$quantidade; ?>  Saída é: 3

 Foram criados 3 objetos da classe Produto.  O construtor da classe incrementa em 1 a variável

$quantidade a cada objeto instanciado.

M

ÉTODO

__

TO

S

TRING

()

Um objeto não foi feito para ser impresso diretamente.

Quando imprimimos a referencia de um objeto com echo ou print, o PHP exibe o identificador do objeto.

Cada objeto possui seu identificador próprio. Para alterar esse comportamento, definindo um

método __toString() para cada classe.

Caso o método __toString() exista, no momento em que mandarmos exibir um objeto no console, o PHP irá imprimir o retorno dessa função.

C

LASSE

P

RODUTO <?php class Produto{ static $quantidade; function __construct(){ self::$quantidade = self::$quantidade + 1; } function __toString(){ $numero = self::$quantidade; return "Eu sou o objeto $numero"; }

} ?>

(13)

E

XEMPLO <?php include_once "classes/Produto.class.php"; $a = new Produto; echo $a; $b = new Produto; echo $b; $c = new Produto; echo $c; ?>  Saída é:  Eu sou o objeto 1  Eu sou o objeto 2  Eu sou o objeto 3

Referências

Documentos relacionados

Contudo, poderão ser ventiladas outras possibilidades, nomeadamente a força, peso ou influência exercida pelo “lobby” do Ministério do Ambiente e Ordenamento do

Os resultados deste trabalho permitem concluir que o CCQ se trata de um ambiente propício para a Aprendizagem Organizacional dentro do contexto estudado, pois

Para saber como o amostrador Headspace 7697A da Agilent pode ajudar a alcançar os resultados esperados, visite www.agilent.com/chem/7697A Abund.. Nenhum outro software

Considerando a formação da equipe de trabalho, o tempo de realização previsto no projeto de extensão e a especificidade das necessidades dos catadores, algumas

cotas, em cada data base, será considerada como início do período a data de aquisição das cotas pelo investidor ou a última data base utilizada para a aferição da taxa de

Fundamentos de matemática elementar: Conjuntos e funções, V.1; Trigonometria V.3; Matrizes determinantes e sistemas V.4; Complexos, Polinômios e Equações V.6; SP, 1994.. Rio

A cinco minutos de carro do Aeroporto Internacional de Dubai, este hotel fica próximo a um campo de golfe cinco estrelas e do Deira City Shopping Center.. Deira City Centre

É nosso objetivo fornecer subsídios aos professores para o trabalho com a língua portuguesa, a partir de um percurso pelo modelo tradicional, pelo qual se determinem