Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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 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
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
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
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
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
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; } ?>
} ?>
// 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
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
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
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
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
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; } } } ?>
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
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
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