SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
POO em
PHP
Class
➔Classe é um molde
➔Foco na Reutilização
➔Quando instanciamos criamos um objeto
estamos criando algo concreto baseado nesse
molde que é a classe.
Atributo
➔Toda Classe possui normalmente Atributo
➔OS Atributos são definidos e poderão ser
utilizados durante toda a classe.
➔ Vejamos o exemplo.
Exemplo de Atributo
●Class Carro{
●
●public $cor;
●
●public $modelo;
●
●public $ligaLeve;
●}
Na pratica
●$gol = new Carro();
●$gol->cor = “Preto”;
●$gol->modelo = “Gol”;
●$gol->ligaLeve = “Eletrica”;
●
●$fusca = new Carro();
●$fusca->cor = “Amarelo”;
●$fusca->modelo = “Fusca”;
●$fusca->ligaLeve = “Manual”;
Métodos
●Métodos é umas das partes que compoe uma
classe, são açoes daquela classe
●Sempre o método vai representar uma Ação
●Vejamos nosso exemplo do Carro.
Métodos
●Class Carro{
●public $cor;
●public $modelo;
●public $ligaLeve;
●
●Public function andar(){
echo “O “.$this->modelo.” andou!”;
●}
●}
Métodos
●$gol = new Carro();
●$gol->cor = “Preto”;
●$gol->modelo = “Gol”;
●$gol->ligaLeve = “Eletrica”;
●$gol->andar();
●
●Resultado = O Gol andou!.
●Perceba que o método é uma função de dentro
de uma classe que execulta algo.
●Verifique que quando usamos $this->modelo
estamos acessando o valor do atributo modelo
dentro do método.
●
Mas para que serve o tal do
$this?
●O $this representa o próprio objetos e a partir
dele podemos execulta métodos ou mesmo
recuperarmos um valor de um atributo.
●
●$carro->andar(), O $this depois que o objetos e
instaciado/criado é substituido peo nome do
objeto, mas internamente na classe ele sempre
fará referência ao $this.
●
Passando parâmentros nos
métodos.
●Um metodo pode receber vários parâmetros.
●
●public function andar($velocidade = 5){
echo “O “.$this-modelo.” andou a”.
●$velocidade. “Km/h”;
●}
●
Métodos construtores
●O método construtor é o método executado no
momento que instaciamos o objeto. Normalmente
ele serve pra atribuirmos valores aos atributos de
nossa classe
●
●Veja o exemplo
Exemplo métodos construtor
●Class Carro{
●public $cor;
●public $modelo;
●public $ligaLeve;
●
●Public function __construtor($modelo, $cor,$ligaLeve){
●$this->modelo = $modelo;
●$this->cor = $cor;
●$this->ligaLeve = $ligaLeve;
●}
●}
Na pratica com o cosntrutor
●$gol = new Carro(“Gol”,”Preto”,”Eletrica”); construtor
●Echo $gol->andar(4); execultou o método
●
●Vai imprimir = O Gol andou 4 Km/h.
●Perceba que quando passamos os parãmetros
no momento da criação, na realidade eles foram
passados para o construtor que atribui esse valor
ao nossos atributos.
●
Modificadores e acesso
●Vocês devem ter se perguntado public??
●O public e um modificador de acesso que torna
tanto os atributos como os métodos publicos,
Como assim?
●Assim = $gol->cor = “Preto”;
●Perceba que estou alterando o valor do atributo
cor diretamente pelo meu objeto.
●Normamente isso não é uma boa prática de
programaçao.
●
O Modificador Private
●O modificar private faz com que o acesso aos
atributos e aos métodos sejam feitos somente dentro
da classe.
●Class Carro{
●Private $modelo;
●}
●$gol = new Carro();
●$gol->modelo = “Preto”;
●
●Isso dará erros, pois o atributo agora e privado e
não temos acesso direto a ele pelo obejto.
●Temos acesso somente internamente atravez da
classe.
E Agora quem poderar nos
ajudar? Os getteres e os setters
●Os getteres e os setteres são métodos que tem
exatamente esse mesmo objetivo de fazer com que
possamos alterar ou recuperar os valores de nosso
atributos, quando estão private.
●
●Veja um exemplo.
Exemplo
getteres e os setters
●Class Carro{
●private $modelo;
●
●Public function setModelo($modelo){
●$this->modelo = $modelo;
●}
●Public function getModelo(){
●return $this->modelo;
●}
●
●}
●
Na prática
●$carro = new Carro();
●$carro->setModelo(“Gol”);
●echo $carro->getModelo();
●Vai imprimir na tela = Gol.
●
●So conseguimos acesso ao atriburo modelo através
dos métodos getModelo e setModelo, pelo fato deles
estar private.
Mas Qual a vantagem?
●Para ficar mas clara a vantagem de utilizar getteres
e setteres, vamos mudar nosso foco de carro e moto
para uma conta bancária.
●
●Vejamos um exemplo.
Class Conta
●Class Conta{
●Private $saldo = 0;
●
●Public function setSaldo($saldo){
$this->saldo = $saldo;
●}
●Public function getSaldo(){
return $this->saldo;
●}
●}
Na Pratica
●$conta = new Conta();
●$conta->setSaldo(100000000);
●Echo $conta->getSaldo();
●
●Já pensou se todo banco fosse assim?
●Você mesmo podendo escolher o seu saldo
bancário?
●Então é claro que tem mais segurança, então bora
implementar segurança nesse sistema.
Class Conta
●Class Conta{
●Private $saldo = 0;
●
●Public function getSaldo(){
return $this->saldo;
●}
●Public function depositar($valor){
●$this->saldo = $this->saldo + $valor;
●}
●}
Agora sim mas seguro
●$conta = new Conta();
●$conta->getSaldo(); Não tenho nenhum saldo
●$conta->depositar(100);
●$conta->getSaldo(); Vai teronar os 1ooR$
●$conta->depositar(50);
●$conta->getSaldo(); Vai retornar o saldo total:150
●
●Se eu tentar roubar o banco virtualmente?
●$conta->saldo = 1000000;
●Teremos um belo de um erro, poiso atributo saldo e
private, só pode manipulado internamente pela class.
Herança
●A herança é algo que facilita bastante a vida do
programador, quando pensamos em herança
lembramos do que?
●Muitos de nós vemos a árvore geneálógica, com ávos,
pais e filhos, mas na verdade quando se usa herança
na programação e a reutilização de codigos, classes,
atributos e ações.
●
●Vamos ver na pratica.
Class Itau
●Class Itau{
●private $taxa_por_saque = 5;
●private $saldo = 0;
●
●public function getTaxaPorSaque(){
● return $this->taxa_por_saque;
●}
●public function getSaldo(){
● return $this->saldo;
●}
●public function depositar($valor){
● $this->saldo += $valor;
●}
●public function sacar($valor){
● if($this->saldo >= $valor){
● $this->saldo -= $valor;
● $this->saldo -= $this->taxa_por_saque;
●}
● }
●}
Class Bradesco
●class Bradesco{
●private $taxa_por_saque = 3;
●private $saldo =0;
●
●public function getTaxaPorSaque(){
●return $this->taxa_por_saque;
●}
●public function getSaldo(){
return $this->saldo;
●}
●public function depositar($valor){
●$this->saldo += $valor;
● }
● public function sacar($valor){
● if($this->saldo >= $valor){
● $this->saldo -= $valor;
● $this->saldo -= $this->taxa_por_saque;
●}
● }
●}
Na pratica
●$conta_itau = new Itau();
●$conta_itau->depositar(100);
●$conta_itau->sacar(50);
●echo $conta_itau-> getSaldo(); vai retornar 45, pois o itau cobra 5 R$.
●
●$conta_bradesco = new Bradesco();
●$conta_bradesco->depositar(100);
●$conta_bradesco->sacar(50);
●echo $conta_bradesco-> getSaldo(); vai retornar 47, pois o itau cobra 3 R$.
●
●Agora eu pergunto? Qual a diferença entre as duas classes?
●R: Somente a taxa por saque, pois o resto são totalmente iguais.
●
●Agora será que sempre que irei criar uma nova classe terei que
duplicar novamente?
E por esses casos que usamos a
Herança.
●Então o que realmente iremos fazer, criar uma
classe que possa herdar as caracteristicas da class
Itau e Bradesco. Onde poderam herdar seus
métodos e atributos.
●
●Vamos ver na pratica?
Class Banco
●Class Banco{
●protected $taxa_por_saques;
●protected $saldo =0;
●
●Public function getTaxaPorSaque(){
●return $this->taxa_por_saque;
●}
●Public function getSaldo(){
●return $this->saldo;
●}
●Public function depositar($valor){
●$this->saldo += $valor;
● }
● Public function sacar($valor){
● if($this->saldo >= $valor){
● $this->saldo -= $valor;
● $this->saldo -= $this->taxa_por_saque;
●}
● }
●}
O modificador de acesso
Protected.
●Você deve ter percebido que não usamos o private
$saldo e private $taxa_por_saque.
●O private tem visibilidade apenas dentro da própria
classe.
●
●O protected não tem acesso publico, mas ele dar
acesso as suas classes filhas.
●Filhas como assim?
Novas classes Itau
e Bradesco
●class Itau extends Banco{
●protected $taxa_por_saldo = 5;
●}
●class Bradesco extends Banco{
●protected $taxa_por_saldo = 3;
●}
●
●Herança de forma bem simplificada e isso, Todos
os métodos e atributos serão herdados de nossa
classe pai, ou seja a classe que estamos
estendendo, que no caso e a classe Banco.
Recapitulando
●Todas as regras que alterarmos agora na classe
Banco, serão altomaticamente replicadas para as
classes Itau e Bradesco.
●
●Perceba que sobrescrevemos o valor do atributo
protegido (protected).
●$taxa_por_saque, pois essa era a única diferença
entre as duas classes.
Classes abstratas
●O ponto principal de uma classe abstrata é que ela
jamais poderá ser instaciada.
●Ex: $banco = new Banco();
●
●Agora eu pergunto teria algum sentido eu
instanciar essa classe? Criar esse objeto?
Modificando nossa
classe Banco●abstract class Banco{
●protected $taxa_por_saques;
●protected $saldo =0;
●
●abstract public function desconto;
●
●Public function getTaxaPorSaque(){
●Return $this->taxa_por_saque;
●}
●Public function setSaldo(){
●Return $this->saldo;
●}
● Public function depositar($valor){
● $this->saldo += $valor;
● }
● Public function sacar($valor){
● if($this->saldo >= $valor){
● $this->saldo -= $valor;
● $this->saldo -= $this->taxa_por_saque;
●}
● }
●
Mais o que esse abstract
significa?
●Que a partir de agora a classe Banco ele servirar
apenas para ser extendida por outras classes.
●Se você tentar instaciar um objeto de Banco
receberá um belo de um erro.
●
●Exemplo = $banco = new Banco();
●
●Teremos um erro, pois Banco é uma classe
abstrata. Quer dizer então que posso criar outro
objeto? Exemplo $santader = new Banco();

Mais conteúdo relacionado

Mais procurados

Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POO
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POOAula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POO
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POOCloves da Rocha
 
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POO
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POOAula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POO
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POOCloves da Rocha
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPRafael Neris
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 

Mais procurados (20)

Aula5
Aula5Aula5
Aula5
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POO
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POOAula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POO
Aula 2 Prof. MSc. Cloves Rocha BV - (2018.2) CCO 2 MA - POO
 
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POO
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POOAula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POO
Aula 2 Prof. MSc. Cloves Rocha - PIE - (2018.2) GTI 2 NA - POO
 
Clean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHPClean Code e Object Calisthenics - Aplicados no PHP
Clean Code e Object Calisthenics - Aplicados no PHP
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Java: Introdução
Java: IntroduçãoJava: Introdução
Java: Introdução
 
Boas Práticas em jQuery
Boas Práticas em jQueryBoas Práticas em jQuery
Boas Práticas em jQuery
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Hiearquia Window
Hiearquia WindowHiearquia Window
Hiearquia Window
 

Destaque

Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2
Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2
Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2paulooficinadotexto
 
Trabajo practico n°10
Trabajo practico n°10Trabajo practico n°10
Trabajo practico n°10Melytapia
 
O futuro do resseguro no brasil apresentação dr marcello gama
O futuro do resseguro no brasil   apresentação dr marcello gamaO futuro do resseguro no brasil   apresentação dr marcello gama
O futuro do resseguro no brasil apresentação dr marcello gamapaulooficinadotexto
 
¿Cómo inscribirnos en ARCE?
¿Cómo inscribirnos en ARCE?¿Cómo inscribirnos en ARCE?
¿Cómo inscribirnos en ARCE?arce2011
 
Edital de atualização em gestão pública
Edital de atualização em gestão públicaEdital de atualização em gestão pública
Edital de atualização em gestão públicacapacitacaoufcg
 
Documento atividades desenvolvidas 2.8
Documento atividades desenvolvidas 2.8Documento atividades desenvolvidas 2.8
Documento atividades desenvolvidas 2.8Elias Ribeiro Elias
 
Apresentação para avaliadores da EaD/UFRN
Apresentação para avaliadores da EaD/UFRNApresentação para avaliadores da EaD/UFRN
Apresentação para avaliadores da EaD/UFRNproplan
 
Edital administração publica
Edital administração publicaEdital administração publica
Edital administração publicacapacitacaoufcg
 
Edital de língua inglesa patos
Edital de língua inglesa   patosEdital de língua inglesa   patos
Edital de língua inglesa patoscapacitacaoufcg
 
Colorear fotografía en blanco y negro 2 ( En Photoshop )
Colorear fotografía en blanco y negro 2  ( En Photoshop )Colorear fotografía en blanco y negro 2  ( En Photoshop )
Colorear fotografía en blanco y negro 2 ( En Photoshop )Cat Lunac
 
Trabajo geografia de israel
Trabajo geografia de israelTrabajo geografia de israel
Trabajo geografia de israelMari Dominguez
 
Isomeria plana exercicios
Isomeria plana exerciciosIsomeria plana exercicios
Isomeria plana exerciciosFernando Lucas
 
Enf vesicbulosas herpes simp,z.
Enf vesicbulosas herpes simp,z.Enf vesicbulosas herpes simp,z.
Enf vesicbulosas herpes simp,z.Cat Lunac
 

Destaque (20)

Unesp tupã
Unesp tupãUnesp tupã
Unesp tupã
 
Direitos autorais
Direitos autoraisDireitos autorais
Direitos autorais
 
Sociales Secuencia Didactica
Sociales Secuencia DidacticaSociales Secuencia Didactica
Sociales Secuencia Didactica
 
Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2
Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2
Comunicação palestra ana fraiman interpessoal na área de microsseguros revisado2
 
Trabajo practico n°10
Trabajo practico n°10Trabajo practico n°10
Trabajo practico n°10
 
Tópicos 1961 a 1969
Tópicos 1961 a 1969Tópicos 1961 a 1969
Tópicos 1961 a 1969
 
O futuro do resseguro no brasil apresentação dr marcello gama
O futuro do resseguro no brasil   apresentação dr marcello gamaO futuro do resseguro no brasil   apresentação dr marcello gama
O futuro do resseguro no brasil apresentação dr marcello gama
 
¿Cómo inscribirnos en ARCE?
¿Cómo inscribirnos en ARCE?¿Cómo inscribirnos en ARCE?
¿Cómo inscribirnos en ARCE?
 
Edital de atualização em gestão pública
Edital de atualização em gestão públicaEdital de atualização em gestão pública
Edital de atualização em gestão pública
 
Documento atividades desenvolvidas 2.8
Documento atividades desenvolvidas 2.8Documento atividades desenvolvidas 2.8
Documento atividades desenvolvidas 2.8
 
Apresentação para avaliadores da EaD/UFRN
Apresentação para avaliadores da EaD/UFRNApresentação para avaliadores da EaD/UFRN
Apresentação para avaliadores da EaD/UFRN
 
Choice Recreio Residence Barra Bonita
Choice Recreio Residence Barra BonitaChoice Recreio Residence Barra Bonita
Choice Recreio Residence Barra Bonita
 
Edital administração publica
Edital administração publicaEdital administração publica
Edital administração publica
 
Slide mestre sincor
Slide mestre sincorSlide mestre sincor
Slide mestre sincor
 
Edital de língua inglesa patos
Edital de língua inglesa   patosEdital de língua inglesa   patos
Edital de língua inglesa patos
 
Colorear fotografía en blanco y negro 2 ( En Photoshop )
Colorear fotografía en blanco y negro 2  ( En Photoshop )Colorear fotografía en blanco y negro 2  ( En Photoshop )
Colorear fotografía en blanco y negro 2 ( En Photoshop )
 
Trabajo geografia de israel
Trabajo geografia de israelTrabajo geografia de israel
Trabajo geografia de israel
 
Isomeria plana exercicios
Isomeria plana exerciciosIsomeria plana exercicios
Isomeria plana exercicios
 
Enf vesicbulosas herpes simp,z.
Enf vesicbulosas herpes simp,z.Enf vesicbulosas herpes simp,z.
Enf vesicbulosas herpes simp,z.
 
Vim
VimVim
Vim
 

Semelhante a Poo

TDC 2011 - Criando um plugin jQuery
TDC 2011 - Criando um plugin jQueryTDC 2011 - Criando um plugin jQuery
TDC 2011 - Criando um plugin jQueryGuilherme Rey
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareFelipe
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que pareceImpacta Eventos
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Introdução à programação em Android e iOS - OOP Java
Introdução à programação em Android e iOS - OOP JavaIntrodução à programação em Android e iOS - OOP Java
Introdução à programação em Android e iOS - OOP JavaLuís Gustavo Martins
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitDiego Tremper
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokWellington Pinheiro
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPguilhermemar
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 

Semelhante a Poo (20)

TDC 2011 - Criando um plugin jQuery
TDC 2011 - Criando um plugin jQueryTDC 2011 - Criando um plugin jQuery
TDC 2011 - Criando um plugin jQuery
 
Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
3 orientacao-objetos
3 orientacao-objetos3 orientacao-objetos
3 orientacao-objetos
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Oop java
Oop javaOop java
Oop java
 
Introdução à programação em Android e iOS - OOP Java
Introdução à programação em Android e iOS - OOP JavaIntrodução à programação em Android e iOS - OOP Java
Introdução à programação em Android e iOS - OOP Java
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
POO.pdf
POO.pdfPOO.pdf
POO.pdf
 
OOP Java
OOP JavaOOP Java
OOP Java
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com Lombok
 
Introducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHPIntroducao a orientacao a objetos com PHP
Introducao a orientacao a objetos com PHP
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 

Poo

  • 2. Class ➔Classe é um molde ➔Foco na Reutilização ➔Quando instanciamos criamos um objeto estamos criando algo concreto baseado nesse molde que é a classe.
  • 3. Atributo ➔Toda Classe possui normalmente Atributo ➔OS Atributos são definidos e poderão ser utilizados durante toda a classe. ➔ Vejamos o exemplo.
  • 4. Exemplo de Atributo ●Class Carro{ ● ●public $cor; ● ●public $modelo; ● ●public $ligaLeve; ●}
  • 5. Na pratica ●$gol = new Carro(); ●$gol->cor = “Preto”; ●$gol->modelo = “Gol”; ●$gol->ligaLeve = “Eletrica”; ● ●$fusca = new Carro(); ●$fusca->cor = “Amarelo”; ●$fusca->modelo = “Fusca”; ●$fusca->ligaLeve = “Manual”;
  • 6. Métodos ●Métodos é umas das partes que compoe uma classe, são açoes daquela classe ●Sempre o método vai representar uma Ação ●Vejamos nosso exemplo do Carro.
  • 7. Métodos ●Class Carro{ ●public $cor; ●public $modelo; ●public $ligaLeve; ● ●Public function andar(){ echo “O “.$this->modelo.” andou!”; ●} ●}
  • 8. Métodos ●$gol = new Carro(); ●$gol->cor = “Preto”; ●$gol->modelo = “Gol”; ●$gol->ligaLeve = “Eletrica”; ●$gol->andar(); ● ●Resultado = O Gol andou!. ●Perceba que o método é uma função de dentro de uma classe que execulta algo. ●Verifique que quando usamos $this->modelo estamos acessando o valor do atributo modelo dentro do método. ●
  • 9. Mas para que serve o tal do $this? ●O $this representa o próprio objetos e a partir dele podemos execulta métodos ou mesmo recuperarmos um valor de um atributo. ● ●$carro->andar(), O $this depois que o objetos e instaciado/criado é substituido peo nome do objeto, mas internamente na classe ele sempre fará referência ao $this. ●
  • 10. Passando parâmentros nos métodos. ●Um metodo pode receber vários parâmetros. ● ●public function andar($velocidade = 5){ echo “O “.$this-modelo.” andou a”. ●$velocidade. “Km/h”; ●} ●
  • 11. Métodos construtores ●O método construtor é o método executado no momento que instaciamos o objeto. Normalmente ele serve pra atribuirmos valores aos atributos de nossa classe ● ●Veja o exemplo
  • 12. Exemplo métodos construtor ●Class Carro{ ●public $cor; ●public $modelo; ●public $ligaLeve; ● ●Public function __construtor($modelo, $cor,$ligaLeve){ ●$this->modelo = $modelo; ●$this->cor = $cor; ●$this->ligaLeve = $ligaLeve; ●} ●}
  • 13. Na pratica com o cosntrutor ●$gol = new Carro(“Gol”,”Preto”,”Eletrica”); construtor ●Echo $gol->andar(4); execultou o método ● ●Vai imprimir = O Gol andou 4 Km/h. ●Perceba que quando passamos os parãmetros no momento da criação, na realidade eles foram passados para o construtor que atribui esse valor ao nossos atributos. ●
  • 14. Modificadores e acesso ●Vocês devem ter se perguntado public?? ●O public e um modificador de acesso que torna tanto os atributos como os métodos publicos, Como assim? ●Assim = $gol->cor = “Preto”; ●Perceba que estou alterando o valor do atributo cor diretamente pelo meu objeto. ●Normamente isso não é uma boa prática de programaçao. ●
  • 15. O Modificador Private ●O modificar private faz com que o acesso aos atributos e aos métodos sejam feitos somente dentro da classe. ●Class Carro{ ●Private $modelo; ●} ●$gol = new Carro(); ●$gol->modelo = “Preto”; ● ●Isso dará erros, pois o atributo agora e privado e não temos acesso direto a ele pelo obejto. ●Temos acesso somente internamente atravez da classe.
  • 16. E Agora quem poderar nos ajudar? Os getteres e os setters ●Os getteres e os setteres são métodos que tem exatamente esse mesmo objetivo de fazer com que possamos alterar ou recuperar os valores de nosso atributos, quando estão private. ● ●Veja um exemplo.
  • 17. Exemplo getteres e os setters ●Class Carro{ ●private $modelo; ● ●Public function setModelo($modelo){ ●$this->modelo = $modelo; ●} ●Public function getModelo(){ ●return $this->modelo; ●} ● ●} ●
  • 18. Na prática ●$carro = new Carro(); ●$carro->setModelo(“Gol”); ●echo $carro->getModelo(); ●Vai imprimir na tela = Gol. ● ●So conseguimos acesso ao atriburo modelo através dos métodos getModelo e setModelo, pelo fato deles estar private.
  • 19. Mas Qual a vantagem? ●Para ficar mas clara a vantagem de utilizar getteres e setteres, vamos mudar nosso foco de carro e moto para uma conta bancária. ● ●Vejamos um exemplo.
  • 20. Class Conta ●Class Conta{ ●Private $saldo = 0; ● ●Public function setSaldo($saldo){ $this->saldo = $saldo; ●} ●Public function getSaldo(){ return $this->saldo; ●} ●}
  • 21. Na Pratica ●$conta = new Conta(); ●$conta->setSaldo(100000000); ●Echo $conta->getSaldo(); ● ●Já pensou se todo banco fosse assim? ●Você mesmo podendo escolher o seu saldo bancário? ●Então é claro que tem mais segurança, então bora implementar segurança nesse sistema.
  • 22. Class Conta ●Class Conta{ ●Private $saldo = 0; ● ●Public function getSaldo(){ return $this->saldo; ●} ●Public function depositar($valor){ ●$this->saldo = $this->saldo + $valor; ●} ●}
  • 23. Agora sim mas seguro ●$conta = new Conta(); ●$conta->getSaldo(); Não tenho nenhum saldo ●$conta->depositar(100); ●$conta->getSaldo(); Vai teronar os 1ooR$ ●$conta->depositar(50); ●$conta->getSaldo(); Vai retornar o saldo total:150 ● ●Se eu tentar roubar o banco virtualmente? ●$conta->saldo = 1000000; ●Teremos um belo de um erro, poiso atributo saldo e private, só pode manipulado internamente pela class.
  • 24. Herança ●A herança é algo que facilita bastante a vida do programador, quando pensamos em herança lembramos do que? ●Muitos de nós vemos a árvore geneálógica, com ávos, pais e filhos, mas na verdade quando se usa herança na programação e a reutilização de codigos, classes, atributos e ações. ● ●Vamos ver na pratica.
  • 25. Class Itau ●Class Itau{ ●private $taxa_por_saque = 5; ●private $saldo = 0; ● ●public function getTaxaPorSaque(){ ● return $this->taxa_por_saque; ●} ●public function getSaldo(){ ● return $this->saldo; ●} ●public function depositar($valor){ ● $this->saldo += $valor; ●} ●public function sacar($valor){ ● if($this->saldo >= $valor){ ● $this->saldo -= $valor; ● $this->saldo -= $this->taxa_por_saque; ●} ● } ●}
  • 26. Class Bradesco ●class Bradesco{ ●private $taxa_por_saque = 3; ●private $saldo =0; ● ●public function getTaxaPorSaque(){ ●return $this->taxa_por_saque; ●} ●public function getSaldo(){ return $this->saldo; ●} ●public function depositar($valor){ ●$this->saldo += $valor; ● } ● public function sacar($valor){ ● if($this->saldo >= $valor){ ● $this->saldo -= $valor; ● $this->saldo -= $this->taxa_por_saque; ●} ● } ●}
  • 27. Na pratica ●$conta_itau = new Itau(); ●$conta_itau->depositar(100); ●$conta_itau->sacar(50); ●echo $conta_itau-> getSaldo(); vai retornar 45, pois o itau cobra 5 R$. ● ●$conta_bradesco = new Bradesco(); ●$conta_bradesco->depositar(100); ●$conta_bradesco->sacar(50); ●echo $conta_bradesco-> getSaldo(); vai retornar 47, pois o itau cobra 3 R$. ● ●Agora eu pergunto? Qual a diferença entre as duas classes? ●R: Somente a taxa por saque, pois o resto são totalmente iguais. ● ●Agora será que sempre que irei criar uma nova classe terei que duplicar novamente?
  • 28. E por esses casos que usamos a Herança. ●Então o que realmente iremos fazer, criar uma classe que possa herdar as caracteristicas da class Itau e Bradesco. Onde poderam herdar seus métodos e atributos. ● ●Vamos ver na pratica?
  • 29. Class Banco ●Class Banco{ ●protected $taxa_por_saques; ●protected $saldo =0; ● ●Public function getTaxaPorSaque(){ ●return $this->taxa_por_saque; ●} ●Public function getSaldo(){ ●return $this->saldo; ●} ●Public function depositar($valor){ ●$this->saldo += $valor; ● } ● Public function sacar($valor){ ● if($this->saldo >= $valor){ ● $this->saldo -= $valor; ● $this->saldo -= $this->taxa_por_saque; ●} ● } ●}
  • 30. O modificador de acesso Protected. ●Você deve ter percebido que não usamos o private $saldo e private $taxa_por_saque. ●O private tem visibilidade apenas dentro da própria classe. ● ●O protected não tem acesso publico, mas ele dar acesso as suas classes filhas. ●Filhas como assim?
  • 31. Novas classes Itau e Bradesco ●class Itau extends Banco{ ●protected $taxa_por_saldo = 5; ●} ●class Bradesco extends Banco{ ●protected $taxa_por_saldo = 3; ●} ● ●Herança de forma bem simplificada e isso, Todos os métodos e atributos serão herdados de nossa classe pai, ou seja a classe que estamos estendendo, que no caso e a classe Banco.
  • 32. Recapitulando ●Todas as regras que alterarmos agora na classe Banco, serão altomaticamente replicadas para as classes Itau e Bradesco. ● ●Perceba que sobrescrevemos o valor do atributo protegido (protected). ●$taxa_por_saque, pois essa era a única diferença entre as duas classes.
  • 33. Classes abstratas ●O ponto principal de uma classe abstrata é que ela jamais poderá ser instaciada. ●Ex: $banco = new Banco(); ● ●Agora eu pergunto teria algum sentido eu instanciar essa classe? Criar esse objeto?
  • 34. Modificando nossa classe Banco●abstract class Banco{ ●protected $taxa_por_saques; ●protected $saldo =0; ● ●abstract public function desconto; ● ●Public function getTaxaPorSaque(){ ●Return $this->taxa_por_saque; ●} ●Public function setSaldo(){ ●Return $this->saldo; ●} ● Public function depositar($valor){ ● $this->saldo += $valor; ● } ● Public function sacar($valor){ ● if($this->saldo >= $valor){ ● $this->saldo -= $valor; ● $this->saldo -= $this->taxa_por_saque; ●} ● } ●
  • 35. Mais o que esse abstract significa? ●Que a partir de agora a classe Banco ele servirar apenas para ser extendida por outras classes. ●Se você tentar instaciar um objeto de Banco receberá um belo de um erro. ● ●Exemplo = $banco = new Banco(); ● ●Teremos um erro, pois Banco é uma classe abstrata. Quer dizer então que posso criar outro objeto? Exemplo $santader = new Banco();