• Nenhum resultado encontrado

Orientação a objetos no PHP

N/A
N/A
Protected

Academic year: 2022

Share "Orientação a objetos no PHP"

Copied!
55
0
0

Texto

(1)

Programação para WEB II Programação para WEB II

Orientação a objetos no PHP Orientação a objetos no PHP

Contato: <[email protected]>

Site: docente.ifsc.edu.br/lara.popov/

Site: http://professores.chapeco.ifsc.edu.br/lara/

Parte II

(2)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 2

Encapsulamento

Encapsulamento

(3)

Encapsulamento

É um dos recursos mais interessantes que a programação orientada a objetos nos fornece.

Trata-se de um mecanismo que provê proteção de acesso aos membros internos de um objeto.

Alguns métodos e propriedades devem ser só de responsabilidade da classe-pai.

Sem os modificadores de acesso, ela perde esta responsabilidade, fazendo com que outras classes tenham acesso a estes métodos e propriedades.

(4)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 4

Encapsulamento

Para atingir o encapsulamento, uma das formas é definindo a visibilidade das propriedades e dos métodos de um objeto.

A visibilidade define a forma como essas propriedades devem ser acessadas.

(5)

Encapsulamento: formas de acesso

- private: não permite ser acessado por classes descendentes (classes-filhas), só pode ser acessado dentro da própria classe.

+ public: significa que o método ou propriedade em questão pode ser acessado por todas as outras classes e métodos sem quaisquer restrições.

# protected: pode ser acessado apenas por métodos da própria classe e classes filhas.

(6)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 6

Encapsulamento Encapsulamento

- private

- private

(7)

Encapsulamento: private

Vamos criar uma classe chamada Fornecedor e marcaremos algumas das propriedades como private.

Dessa forma, os elementos private só poderão ser alterados por métodos da mesma classe.

Funcionário - Codigo

+ Nome

- Nascimento - Salario

(8)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 8

Encapsulamento: private

Funcionario.class.php

<?php

class Funcionario { private $Codigo;

public $Nome;

private $Nascimento;

private $Salario;

}

?>

Funcionário - Codigo

+ Nome

- Nascimento - Salario

(9)

Encapsulamento: private

private.php

<?php

#carrega classe Funcionario

include_once 'Funcionario.class.php';

$ana = new Funcionario;

$ana->Salario = 'Oitocentos reais';

?>

RETORNO: Fatal error: Cannot access private property Funcionario::$Valor in

C:\xampp\htdocs\aulas\aula13\private.php on line 6

Funcionário - Codigo

+ Nome

- Nascimento - Salario

(10)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 10

Encapsulamento: private

Mas como faço para atribuir algo a essa propriedade caso necessário?

Para atribuir algo, basta criar um método pertencente a classe Funcionario que manipule estas propriedades.

(11)

Encapsulamento: private: exemplo

//Incrementando a Classe Funcionario

// Método SetSalario

function SetSalario($Salario){

//verifica se é numérico e positivo

if(is_numeric($Salario) and ($Salario >0)){

$this->Salario = $Salario;

} }

//Método GetSalario function GetSalario(){

return $this->Salario;

}

(12)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 12

Encapsulamento: private: exemplo

//Incrementando private.php

<?php

//carrega classe Funcionario

include_once 'Funcionario.class.php';

$ana = new Funcionario;

$ana->Nome = 'Ana';

//atribui novo valor

$ana->SetSalario(800);

//obtem valor

echo 'Nome: '.$ana->Nome;

echo '<br/>Salário: R$ '.$ana->GetSalario();

?>

(13)

Encapsulamento: private

Poderíamos criar um set e um get para mais elementos definidos como private mas cuidado, utilize os Getters e Setters somente quando existe a real necessidade, variáveis internas ou que não precisam de nenhum tipo de verificação ou tratamento, não utilize.

Prefira sempre utilizar métodos Get e Set ao invés de um campo público (public) mas lembre-se, simplificar é a alma da POO, criar dezenas de métodos não simplifica.

(14)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 14

Encapsulamento Encapsulamento

+ protected

+ protected

(15)

Encapsulamento: protected

Vale ressaltar que quando uma propriedade é definida como private, ela não pode ser sobrescrita por classes filhas, ou seja, uma classe filha não consegue chamar os métodos setters e getters da classe pai (no caso do atributo estar como private).

Caso você tenha uma classe Funcionário com o método setSalario e o atributo Salário do tipo private, e crie a subclasse Estagiário, você não consegue chamar o método mesmo fazendo uso da herança, está é uma característica do private.

Em outras palavras, se um atributo é do tipo private, ele só funciona na classe que foi declarado, caso você queira fazer uso do mesmo em outras classes (filhas) é necessário modificar o tipo para Protected.

(16)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 16

Encapsulamento: protected

Estagiario.class.php

class Estagiario extends Funcionario{

function GetSalario(){

return $this->Salario * 1.12;

} }

Funcionário - Codigo

+ Nome

- Nascimento

# Salario

+SetSalario() +GetSalario()

Estagiário +GetSalario()

(17)

Encapsulamento: protected

Depois das duas classes criadas, vamos criar o objeto estagiário:

$aninha = new Estagiario;

$aninha->Nome = 'Ana';

//atribui novo valor

$aninha->SetSalario(800);

//obtem valor

echo 'Nome: '.$aninha->Nome;

echo '<br/>Salário: R$ '.$aninha->GetSalario();

(18)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 18

Encapsulamento Encapsulamento

+ public

+ public

(19)

Encapsulamento: public

Explicar o comportamento do modificador de acesso public é simples, pois é a propriedade padrão do PHP.

Quando não é definido a visibilidade, ela será pública ou seja, você pode modificar, herdar ou atribuir sem nenhum impedimento, não é necessário os métodos Gets e Sets para propriedades públicas.

(20)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 20

Encapsulamento: public

$paulo = new Funcionario;

$paulo->Nome = 'Ana';

//obtem valor

echo 'Nome: '.$paulo->Nome;

...

(21)

Armazenamento

As classes permitem armazenar valores de duas formas:

constantes de classe e

propriedades estáticas.

Estes atributos são comuns em todos os objetos da mesma classe.

(22)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 22

Constantes

Constantes

(23)

Constantes

Uma constante é exatamente o oposto de uma variável, ou seja, algo que mantém seu valor até o final do script (salvo alguma exceções).

Geralmente definimos uma constante perto do início do código ou em uma função.

A declaração de constantes é feita através da palavra- chave const.

Acessar constantes de classe fora do escopo dela:

NomeClasse::Constante;

Dentro da classe:

self::Constante

(24)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 24

Constantes: exemplo

/* Vamos declarar uma

* constante chamada pi

*/

class Funcoes{

const Pi = 3.14;

}

/* Vamos herdar Funcoes

* e criar outra constante

*/

class Aplicacao extends Funcoes{

const Versao = 2.7;

function __construct($Nome){

echo $Nome. "<br/>";

echo self::Versao . "< br />";

echo parent::Pi . "< br />";

echo Funcoes::Pi . "< br />";

} }

$sistema = new Aplicacao("IFSC Software");

(25)

Propriedades e Propriedades e

Métodos

Métodos

estáticos

estáticos

(26)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 26

Propriedades e métodos estáticos

Podemos considerar que propriedades e métodos estáticos podem ser acessados sem a necessidade de instanciar um objeto.

Utilizamos este recurso quando, por exemplo, temos um método que é acessado diversas vezes na mesma aplicação, e queremos economizar algumas linhas de código a fim de não ter que criar um objeto a todo momento.

(27)

Propriedades e métodos estáticos

É importante destacar que um método estático não pode fazer referência a propriedades internas pelo operador

$this, pois este operador é usado para referenciar instâncias da classe ou seja, objetos.

Utilizamos a palavra chave static para definir a declaração de membros estáticos.

(28)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 28

Propriedades e métodos estáticos

class Teste{

public static $propriedade = "Esta é uma propriedade estática";

public static function MetodoEstatico(){

echo "Este é um método estático";

} }

/* Para acessar é simples,

* perceba que não é necessário

* criar o objeto.

*/

echo Teste::$propriedade;

//Agora o método

Teste::MetodoEstatico();

(29)

Propriedades e métodos estáticos

Membros estáticos também podem ser acessados internamente utilizando o operador self (o mesmo que vimos anteriormente), veja:

class Teste{

public static $propriedade = "www.cafeesoftware.com - Transformando Café em Software";

public static function RetornaPropriedade(){

return self::propriedade;

}

public static function UsarMetodoRetorna(){

return self::RetornaPropriedade();

} }

// Para acessar:

echo Teste::RetornaPropriedade();

Teste::UsarMetodoRetorna();

(30)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 30

Propriedades e métodos estáticos

Quando se tratar de uma subclasse herdando propriedades ou mesmo métodos estáticos, a referência é feita normalmente através da palavra reservada parent, como já vimos anteriormente.

(31)

Associação, Associação, Agregação e Agregação e

Composição

Composição

(32)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 32

Conceitos

Associação:

É a relação mais comum entre dois objetos.

Quando acontece? Quando uma classe

“usa” outra classe.

Exemplo: Um motorista utiliza (depende do carro, mas este não faz parte do motorista) o carro para trabalhar.

(33)

Conceitos

Agregação:

É o tipo de relação conhecida como todo/parte.

Na agregação o objeto agrega outro objeto, ou seja, torna um objeto externo parte de si..

Assim o objeto pai poderá utilizar funcionalidades do objeto agregado, mas ele não depende dele (agregado) para existir.

Exemplo: A tampa de uma caneta é parte da caneta, se a caneta não tiver a tampa, ela não deixará de ser uma caneta.

(34)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 34

Conceitos

Composição:

Neste caso, o objeto-pai é responsável pela criação e destruição de suas partes.

O objeto-pai realmente “possui” as instâncias de suas partes.

Resumidamente, um só existe caso o outro também exista.

Exemplo: O motor de um carro é parte fundamental do carro.

(35)

Associação

Associação

(36)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 36

Associação

A forma mais comum de associação é quando temos um objeto como atributo de outro.

Criaremos um objeto Produto e outro Fornecedor. Onde Fornecedor é um dos atributos de Produto.

(37)

Associação

Produto Id: Integer Nome: String Valor: Float

Fornecedor: Fornecedor

Fornecedor Id: Integer

RazaoSocial: String Endereco: String Telefone: String

Observe que uma das propriedades (Fornecedor), espera receber um objeto do tipo Fornecedor.

(38)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 38

Associação

class Produto{

public $Id;

public $Nome;

public $Valor;

public $Fornecedor;

public function __construct($Id, $Nome, $Valor, $Fornecedor){

$this->Id = $Id;

$this->Nome = $Nome;

$this->Valor = $Valor;

$this->Fornecedor = $Fornecedor;

} }

(39)

Associação

class Fornecedor{

public $Id;

public $RazaoSocial;

public $Endereco;

public $Telefone;

public function __construct($Id, $RazaoSocial, $Endereco, $Telefone){

$this->Id = $Id;

$this->RazaoSocial = $RazaoSocial;

$this->Endereco = $Endereco;

$this->Telefone = $Telefone;

} }

$fornecedor = new Fornecedor(359, "Mercado da Casa", "Rua B", "3232-2222" );

$produto = new Produto(122, "Café 250g", 2.85, $fornecedor );

echo "Código: " . $produto->Codigo . "<br />";

echo "Produto: " . $produto->Nome . "<br />";

(40)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 40

Agregação

Agregação

(41)

Agregação

Conforme visto anteriormente, esta relação se dá quando temos o

“TODO/PARTE”.

Uma forma de exemplificar sua implementação e com o clássico exemplo de um carrinho de compras.

Teremos duas classes, produto (bem parecido com a que vimos anteriormente) e a classe Carrinho.

(42)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 42

Agregação

Produto Id: Integer Nome: String Valor: Float

Fornecedor: Fornecedor

Carrinho

Itens: Produto

ExibeLista() CalculaTotal()0

Observe que Itens é um array, poderia ser representando como: Itens[] : Produto.

(43)

Agregação

class Produto{

public $Id;

public $Nome;

public $Valor;

public function __construct($Id, $Nome, $Valor){

$this->Id = $Id;

$this->Nome = $Nome;

$this->Valor = $Valor;

} }

(44)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 44

Agregação

class Carrinho{

private $itens;

public function InsereProduto(Produto $item){

$this->itens[] = $item;

}

public function ExibeLista(){

foreach( $this->itens as $item ){

return $item->nome."<br />;

} }

public function CalculaTotal(){

$valor_total = 0;

foreach( $this->itens as $item ){

$valor_total += $item->Valor;

}

echo " R$ " . number_format($valor_total, 2, ',', '.');

} }

(45)

Agregação

$produto1 = new Produto(1, "Milho verde", 1.75);

$produto2 = new Produto(2, "Ervilha", 1.65);

$produto3 = new Produto(3, "Café 250Gr", 3.45);

$produto4 = new Produto(4, "Refrigerante 2L", 3.69);

$CarrinhoCompra = new Carrinho();

$CarrinhoCompra->InsereProduto($produto1);

$CarrinhoCompra->InsereProduto($produto2);

$CarrinhoCompra->InsereProduto($produto3);

$CarrinhoCompra->InsereProduto($produto4);

$CarrinhoCompra->ExibeLista();

$CarrinhoCompra->CalculaTotal();

(46)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 46

Composição

Composição

(47)

Composição

A diferença da composição para a agregação é que quando o objeto

“todo” é destruído, suas partes também são, exatamente por terem sido criadas pelo objeto “todo”.

Podemos dizer que na composição o objeto-pai “possui” as instâncias de suas partes.

(48)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 48

Composição

Cliente

Codigo: Integer Endereco: String

Contato: Contato

Contato

Nome: Integer Email: String

Telefone: String

Observe que Itens é um array, poderia ser representando como: Itens[] : Produto.

(49)

Composição

class Contato{

public $Nome;

public $Email;

public $Telefone;

/* Método setContato()* Grava informações de contato */

public function setContato($Nome, $Email, $Telefone){

$this->Nome = $Nome;

$this->Email = $Email;

$this->Telefone = $Telefone;

}

/* Método EscreveContato() Escreve as informações de contato */

public function EscreveContato(){

echo "Nome: " . $this->Nome . "<br />";

echo "Email: " . $this->Email . "<br />";

echo "Telefone: " . $this->Telefone . "<br />";

}

(50)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 50

Composição

class Cliente{

public $Codigo;

public $Endereco;

public $Contato;

/* Método construtor() Construtor da classe */

public function __construct(){

/* Instancia um novo Contato Perceba que isso só é feito aqui. Não é feito fora dessa* classe */

$this->Contato = new Contato();

}

/* Método setContato() Grava informações de contato */

public function setContato($Nome, $Email, $Telefone){

// Chama e envia informações para o objeto Contato $this->Contato->setContato($Nome, $Email, $Telefone);

}

/* Método EscreveContato() Escreve as informações de contato */

public function EscreveContato(){

// Chama um método do objeto Contato $this->Contato->EscreveContato();

} }

(51)

Composição

$leandro = new Cliente();

$leandro->Codigo = 7;

$leandro-

>setContato("Leandro","leandrocastro@gmail .com","(33) 3333-3333");

$leandro->Endereco = "Rua 13 de maio";

$leandro->EscreveContato();

echo "Endereço: " . $leandro->Endereco;

(52)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 52

Exercícios

Exercícios

(53)

Revisando

http://ned.unifenas.br/cursosgratuitos/2 012/poo/

(54)

Lara Popov Zambiasi Bazzi Oberderfer Programação para WEB II

Programação para WEB II 54

Revisando Orientação a Objetos

Classe

Objeto

Construtores

Destrutores

Herança

Polimorfismo

Encapsulamento

Abstração

Associação

Agregação

Composição

(55)

Referencias Bibliográficas

Introdução à Orientação a Objetos em PHP.

Disponível em:

http://www.devmedia.com.br/introducao-a- orientacao-a-objetos-em-php/26762.

Acesso em: 07 de Ago de 2014.

Curso de PHP Orientado a Objetos.

Disponível em:

http://cafeesoftware.com/curso-de-php-

orientado-a-objetos-parte-1/. Acesso em 08 de Ago de 2014.

Referências

Documentos relacionados

Foram ainda assinadas moções conjuntas no Parlamento europeu sobre assuntos muito graves, por vezes mesmo com a participação do Partido Popular Europeu e

Ao refletir sobre suas experiências, muitas mulheres perceberam que há uma enorme desvalorização do seu traba- lho por parte dos maridos e também da própria comunidade, que

Deus sabia que esses dois indivíduos possuíam a constituição genética específica para criar você em especial, exatamente como ele tinha em mente.. Eles tinham

Era uma vez uma indústria de calçados, aqui no Brasil, que desenvolveu um projeto de exportação de sapatos para a Índia e enviou dois de seus consultores a pontos diferentes do

23 http://www.slideshare.net/durgarrai/empresrios-portugueses-incapazes-inteis-nocivos-e-batoteiros.. crescimento do PIB, uma redução da dívida só existirá com um mais

— 0 desenho 5 mostra os encapsulamentos mais comuns nos LEDs - redondo, retangular e quadrado — além do seu símbolo, junto ao qual está indicado o sentido que se

Podemos considerar a tutela de indígenas uma parte fundamental do “DNA” de uma política estatal pensada para, legal e institucionalmente, subjugar os povos indígenas

Basta lembrar que algumas das democracias ocidentais mais sólidas não têm voto direto para escolher quem vai comandar o país.. Nos EUA o presidente é eleito por um colégio