Você está na página 1de 43

PHP: Programando com Orientao a Objetos

Pablo Dall'Oglio Adianti Solutions www.adianti.com.br

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Roteiro

Conceitos de Orientao a Objetos; Classes, objetos, propriedades, mtodos; Mtodos construtores e destrutores; Associao, agregao, composio e herana; Encapsulamento e polimorfismo; Exemplos prticos.

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Introduo Programao Estruturada

Vamos entender como surgiu a Orientao a Objetos; Como era a programao antes da O.O. ? O paradigma que reinava era a programao estruturada; A programao estruturada introduziu conceitos importantes na engenharia de software em sua poca; baseada fortemente na modularizao; A idia da modularizao dividir o programa em unidades menores conhecidas por procedimentos ou funes, que so construdas para desempenhar uma tarefa especfica;
E Processo S

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Introduo Programao Estruturada

Na programao estruturada, as unidades do cdigo (funes) se interligam por meio de trs mecanismos bsicos: seqncia, deciso e iterao, como ilustrado na figura a seguir:

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Introduo Programao Estruturada

As funes ou procedimentos e podem ser executados vrias vezes; As funes podem receber parmetros fazendo com que o resultado do seu processamento interno varie de acordo com os argumentos (parmetros) de entrada; possvel executar uma funo sob diversas circunstncias diferentes; Estes itens configuram um importante conceito da engenharia de software: o REUSO; Alm disto, uma boa modularizao deve ter alta coeso e baixo acoplamento;

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Anlise Estruturada

Anlise Estruturada: Em primeiro lugar se pensa nos dados e nas estruturas que iro armazen-los (E.R.).

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Anlise orientada a objetos

Anlise O.O.: Em primeiro lugar se pensa nos conceitos, seus atributos, seu comportamento e nos seus relacionamentos.

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Anlise orientada a objetos

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Objetos

O sistema organizado atravs de um conjunto de objetos; Uma entidade que possui atributos, comportamento e se relaciona com outros objetos por meio de mensagens; Um objeto pode ser algo concreto (pessoa, bicicleta, um pedido) ou abstrato (uma boto, uma janela, um arquivo); O objeto possui responsabilidade sobre si (encapsulamento); Os objetos propiciam maior compreenso do mundo real; A orientao a objetos leva um baixo grau de acoplamento; Algumas linguagens Orientadas a Objetos: Smaltalk; C++; Java; PHP;
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Objetos

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Classes

A classe uma estrutura esttica utilizada para descrever (moldar) objetos; A classe um modelo (template) para criao de objetos; Podem ser classes: entidades do negcio da aplicao (pessoa, conta, cliente), entidades de interface (janela, boto, painel, frame, barra), dentre outras (conexo com BD, um arquivo XML, um Web Service); Um grupos de objetos descrito por uma classe; Um objeto uma instncia de uma classe. Exemplo: Classe: Fatura / Objeto: Fatura no. 5470 Classe: Pessoa / Objeto: Joo, Maria, etc...
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Propriedades

Propriedades so Atributos, caractersticas de um objeto; Os atributos definem a identidade de um objeto; Exemplo: Ns, seres humanos, somos definidos pelo conjunto de nossos atributos: fsicos (algura, cor da pele, algura, cor do cabelo), psicolgicos (personalidade, humor, empatia), de trabalho (capacidade, especializao, criatividade), de estudo (nvel de escolaridade), dentre outros.

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Mtodos

Os mtodos so operaes que definem o comportamento de um objeto; Os mtodos definem como o objeto ir se relacionar com o mundo externo; por meio de um mtodo, que solicitamos que um objeto faa algo.

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Definindo uma classe


<?php class Pessoa { // define os atributos public $Codigo; public $Nome; public $Altura; public $Idade; // define os mtodos function setNome($nome) { $this->Nome = $nome; } function Crescer($centimetros) { $this->Altura += $centimetros; } function Envelhecer($anos) { $this->Idade += $anos; }

Atributos

Mtodos

Mtodos

Mtodos

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

} ?>

Instanciando Objetos
<?php // inclui a classe include 'pessoa.class.php'; // instancia o objeto $maria = new Pessoa; // define aributos $maria->Altura = 1.7; $maria->Idade = 28; // executa mtodos $maria->setNome('Maria da Silva'); output $maria->Crescer(0.1); object(Pessoa)#1 (4) { $maria->Envelhecer(1); ["Codigo"]=> NULL // imprime o objeto var_dump($maria); ?> Instanciando o objeto

["Nome"]=> string(14) "Maria da Silva" ["Altura"]=> float(1,8) ["Idade"]=> int(29)

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Instanciando Objetos
<?php //instanciaumobjeto(janela) $janela=newGtkWindow; //defineotamanhodajanela $janela->set_size_request(300,200); //instanciaumrtulodetexto $label=newGtkLabel('OlMundo'); //adicionaortulojanela $janela->add($label); //exibeajanela $janela->show_all(); //controleGtk Gtk::Main(); ?>

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Construtores e destrutores

Um construtor um mtodo especial utilizado para definir o comportamento inicial de um objeto, ou seja, o comportamento no momento de sua criao; O mtodo construtor executado automaticamente no momento em que instanciamos um objeto por meio do operador new; Um mtodo destrutor ou finalizador um mtodo especial executado automaticamente quando o objeto desalocado da memria, quando atribumos o valor NULL ao objeto, quando utilizamos a funo unset() sobre o mesmo ou, em ltima instncia, quando o programa finalizado; O mtodo destrutor pode ser utilizado para finalizar conexes, apagar arquivos temporrios criados durante o ciclo de vida do objeto, dentre outros.
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Construtores e destrutores
<?php class Pessoa { public $Codigo; public $Nome; // mtodo construtor function __construct($codigo, $nome) { $this->Codigo = $codigo; $this->Nome = $nome; } // mtodo destrutor function __destruct() { echo "desalocando {$this->Nome}\n"; }

output
object(Pessoa)#1 (2) { ["Codigo"]=> int(27) ["Nome"]=> string(14) "Maria da Silva" } object(Pessoa)#2 (2) { ["Codigo"]=> int(28) ["Nome"]=> string(14) "Joana Maranho" } desalocando Maria da Silva desalocando Joana Maranho

$maria = new Pessoa(27, 'Maria da Silva'); $joana = new Pessoa(28, 'Joana Maranho'); var_dump($maria, $joana); unset($maria); Mtodo destrutor unset($joana); ?>

Mtodo construtor

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Encapsulamento

As classes so orientadas ao assunto, ou seja, cada classe responsvel por um assunto diferente e responsvel sobre o mesmo, ou seja, deve proteger o seu acesso; A proteo ao acesso ao seu contedo se d por meio de mecanismos como o de encapsulamento; O encapsulamento visa separar os aspectos externos de um objeto dos detalhes internos daquele objeto. uma forma de proteger certos atributos, evitando que os mesmos contenham valores inconsistentes ou sejam manipuladas indevidamente; Exemplo: Datas, Valores Numricos;

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Estrutura de um Objeto

dados
mensagem

funes (mtodos) que manipulam os dados

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Encapsulamento
<?php class Pessoa { private $Codigo; public $Nome; private $Altura; function __construct($codigo) { $this->Codigo = $codigo; } function setAltura($altura) { $this->Altura = $altura; }

output
Fatal error: Cannot access private property Pessoa::$Altura in exemplo.php on line 25

Tipos de visibilidade
PRIVATE :: SOMENTE PRPRIA CLASSE PROTECTED :: CLASSE E DESCENDENTES PUBLIC :: DE QUALQUER PONTO

$maria = new Pessoa(27); $maria->Nome = 'Maria da Silva'; $maria->setAltura(1.7); $joana = new Pessoa(28); $joana->Nome = 'Joana Maranho'; $joana->Altura = 1.8; ?>

Acesso no permitido

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Associaes

Associao a relao mais comum entre dois objetos; Na associao, um objeto possui uma referncia outro objeto, podendo visualizar seus atributos ou mesmo acionar uma de suas funcionalidades (mtodos); A forma mais comum de implementar uma associao ter um objeto como atributo de outro; No exemplo a seguir, criamos um objeto do tipo Produto e outro do tipo Fornecedor; Um dos atributos do produto o fornecedor; Leia-se um objeto est relacionado com outro objeto;

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Associaes

Exemplo em diagrama UML

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Associaes
<?php classProduto { public$Codigo; public$Descricao; public$Preco; public$Fornecedor; <?php classFornecedor { public$Nome; public$Telefone; public$Endereco; } ?>

// exibe os dados do produto functionExibeDados() { echo'Codigo:'.$this->Codigo."<br>\n"; echo'Descricao:'.$this->Descricao."<br>\n"; echo'Preo:'.$this->Preco."<br>\n"; echo'Fornecedor:'.$this->Fornecedor->Nome."<br>\n"; }

} ?>

// atribui um fornecedor ao produto function setFornecedor(Fornecedor $fornecedor) { $this->Fornecedor = $fornecedor; Associao interna }

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Associaes
<?php include_once'classes/Produto.class.php'; include_once'classes/Fornecedor.class.php'; $macarrao=newProduto; $macarrao->Codigo =7; $macarrao->Descricao ='Macarroinstantneo'; $macarrao->Preco =1.29; Codigo: 7 $macarrao->Quantidade=10; $isabela=newFornecedor; $isabela->Nome ='MassasIsabela'; $isabela->Telefone='(51)1234-5678'; $isabela->Endereco ='RuadasMassas'; //associacao $macarrao->setFornecedor($isabela); //exibeasinformacoes $macarrao->ExibeDados(); ?>

output

Descricao: Macarro instantneo Preo: 1,29 Fornecedor:Massas Isabela

Mtodo de associao

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Agregao

A agregao o tipo de relao entre objetos conhecida como todo/parte; Na agregao, um objeto agrega outro objeto, ou seja, referencia objeto(s) externo dentro de si; O objeto-pai poder agregar uma ou muitas instncias de um outro objeto e poder utilizar funcionalidades do objeto agregado; A forma mais simples de implementar agregaes utilizando arrays; Criamos um array como atributo do objeto, sendo que o papel deste array armazenar inmeras instncias de um outro objeto; Leia-se um objeto contm instncias de outros objetos.
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Agregao

Exemplo em diagrama UML

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Agregao
<?php classCestaDeCompras { private$Produtos;//colecaodeobjetos(array) functionAdicionarItem(Produto$produto) { Mtodo de agregao $this->Produtos[]=$produto; } functionExibeLista() { foreach($this->Produtosas$produto) { echo$produto->Descricao."<br>\n"; } } functionCalculaTotal() { $total=0; foreach($this->Produtosas$produto) { $total+=$produto->Preco; } return$total; } } ?>
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Agregao
<?php classProduto { public$Codigo; public$Descricao; public$Preco; } $chocolate=newProduto; $chocolate->Codigo=4; $chocolate->Descricao='ChocolateSensao'; $chocolate->Preco=1.2; $picanha=newProduto; $picanha->Codigo=7; $picanha->Descricao='PicanhaBovina'; $picanha->Preco=18; $cesta=newCestaDeCompras; $cesta->AdicionarItem($chocolate); $cesta->AdicionarItem($picanha); $cesta->ExibeLista(); echo'Total:'; echo$cesta->CalculaTotal(); ?>
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

output Chocolate Sensao Picanha Bovina Total : 19,2

Chamada agregao

Composio

Composio tambm uma relao todo/parte; A diferena em relao agregao que, na composio, o objeto-pai ou todo responsvel pela criao e destruio de suas partes; O objeto-pai realmente possui a(s) instncia(s) de suas partes. Diferentemente da agregao, na qual o todo e as partes so independentes; Na agregao, ao destruirmos o objeto todo as partes permanecem na memria, por terem sido criadas fora do escopo da classe todo. J na composio, quando o objeto todo destrudo, suas partes tambm so; Leia-se um objeto composto de outros objetos;
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Composio

Exemplo em diagrama UML

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Composio
<?php class Fornecedor { public $Codigo; public $RazaoSocial; public $Contatos; <?php class Contato { public $Nome; public $Telefone; public $Email; } ?>

function addContato($nome, $telefone, $email) { $contato = new Contato; $contato->Nome = $nome; $contato->Telefone = $telefone; Mtodo de composio $contato->Email = $email; $this->Contatos[] = $contato; } function ImprimeContatos() { foreach ($this->Contatos as $contato) { var_dump($contato); } }

} ?>

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Composio
<?php include_once 'classes/Fornecedor.class.php'; include_once 'classes/Contato.class.php'; // instancia novo fornecedor $fornecedor = new Fornecedor; $fornecedor->Codigo = 10; $fornecedor->RazaoSocial = 'Produtos Bom Gosto S.A.'; // atribui informaes de contato $fornecedor->addContato('Mauro', '51 1234-5677', 'mauro@bomgosto.com.br'); $fornecedor->addContato('Maria', '51 1234-5678', 'maria@bomgosto.com.br'); $fornecedor->addContato('Joana', '51 1234-5679', 'joana@bomgosto.com.br'); // debug var_dump($fornecedor); ?>

output
Fornecedor Object ( [Codigo] => 10 [RazaoSocial] => Produtos Bom Gosto S.A. [Contatos] => Array [0] => Contato Object [Nome] => Mauro [Telefone] => 51 1234-5677 [Email] => mauro@bomgosto.com.br [1] => Contato Object ...

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Herana

Um dos maiores benefcios na utilizao da orientao a objetos o reuso; A possibilidade de reutilizar partes de cdigo nos d maior agilidade no dia-a-dia, alm de eliminar a necessidade de eventuais duplicaes ou reescritas de cdigo; Uma herana um tipo de relacionamento que permite especializar uma classe, criar verses refinadas dela; Na herana, as classes so organizadas em hierarquias; A herana uma forma de reutilizar componentes de software aperfeioando-os ou adicionando caractersticas especficas;

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Hierarquia de Classes
Super classe

Sub classes

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Hierarquia de Classes

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Herana

A herana permite o compartilhamento de atributos e mtodos entre as classes de uma hierarquia; Cada subclasse herda todas as propriedades (atributos e mtodos) de suas ancestrais; Uma subclasse pode estender ou redefinir a estrutura e/ou o comportamento de sua super classe; Leia-se um objeto tipo de outro objeto; um poderoso instrumento de reusabilidade, pois: permite que atributos e operaes comuns hierarquia sejam especificados apenas uma vez; Permite que novas classes sejam criadas contendo apenas a diferena entre ela e a classe-pai.
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Herana
<?php abstractclassConta { private $Agencia; private $Numero; protected$Saldo; function__construct($agencia,$numero,$saldo) { $this->Agencia=$agencia; $this->Numero=$numero; $this->Saldo=$saldo; } functionDepositar($valor) { $this->Saldo+=$valor; } functiongetSaldo() { return$this->Saldo; } } ?>
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Uma classe abstrata no pode ser instanciada diretamente.

Herana
<?php finalclassContaCorrenteextendsConta { public$Limite; functionRetirar($valor) { if($this->Saldo+$this->Limite>$valor) { $this->Saldo-=$valor; } } } finalclassContaPoupancaextendsConta { functionRetirar($valor) { if($this->Saldo>$valor) { $this->Saldo-=$valor; } } } ?>

Uma classe final no pode ser extendida.

Classe filha

Classe filha

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Herana
<?php include_once'classes/Conta.class.php'; include_once'classes/ContaPoupanca.class.php'; include_once'classes/ContaCorrente.class.php'; $conta1=newContaPoupanca('1','123',100); $conta2=newContaCorrente('2','456',200); $conta2->Limite=500; echo'saldoconta1:'.$conta1->getSaldo();//exibir100 echo'saldoconta2:'.$conta2->getSaldo();//exibir200 $conta1->Depositar(300); $conta2->Depositar(500); echo'saldoconta1:'.$conta1->getSaldo();//exibir400 echo'saldoconta2:'.$conta2->getSaldo();//exibir700 $conta1->Retirar(500);//saldomaximoe400,naodevepermitir $conta2->Retirar(1199);//200+500+500(limite)saldo= 1200(permitir) echo'saldoconta1:'.$conta1->getSaldo();//exibir400 echo'saldoconta2:'.$conta2->getSaldo();//exibir-499 ?>
Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

output saldo saldo saldo saldo saldo saldo conta1: conta2: conta1: conta2: conta1: conta2: 100 200 400 700 400 -499

O que um sistema O.O. ?

Um sistema OO modelado, implementado e efetivamente funciona como um conjunto de objetos que interagem entre si.

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

Leitura Recomendada :-)

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

42

Obrigado!

E-Mail
pablo@php.net pablo@dalloglio.net

URL
http://www.adianti.com.br http://www.pablo.blog.br

Pablo Dall'Oglio [pablo@php.net] Introduo Orientao a Objetos :: com exemplos do livro PHP Programando com Orientao a Objetos www.adianti.com.br/phpoo

43

Você também pode gostar