SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
(Re)Pensando a
     Orientação a Objetos
      Luís Otávio Cobucci Oblonczyk




25 de Agosto de 2012
Luís Otávio Cobucci Oblonczyk
●
    Evangelista (doido por) PHP
●
    Desenvolvedor na Softnex Tecnologia (SC)
●
    Membro do PHPSC
●
    ZCE PHP 5.3
●
    Perfeccionista ao extremo =P


    @lcobucci
    http://about.me/lcobucci
Orientação a Objetos muda nossa vida?
O que é OOP?
“Orientação a objetos é um paradigma de
análise, projeto e programação de sistemas de
software baseado na composição e interação
entre diversas unidades de software chamadas de
objetos.”

http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
O que é OOP?
●
    Paradigma = Padrão a ser seguido; Pressuposto
    filosófico
●
    Busca tornar o mundo das linguagens que os
    computadores entendem mais próximo da
    realidade
A mudança principal é como pensamos!
Pequeno exercício mental...
História da OOP
●
    Os termos “objetos” e “instâncias” foram
    utilizados por volta da década de 60
●
    O conceito formal foi introduzido (também nos
    anos 60) na linguagem de programação Simula
    67
●
    Na década de 70 foi lançada, na Xerox PARC, a
    linguagem Smalltalk, que teve influências de
    conceitos da Simula 67
Linguagens e OOP
●
    Funcionalidades OOP adicionadas como
    extensão

●
    Principalmente OOP

●
    Puramente OOP
Porque repensar a OOP?
Porque repensar a OOP?



Não, eu não sou pago por
colocar tirinhas do vida de
programador nas minhas
palestas.

Bem que podia né? =P
Pontos negativos da OOP
●
    Aprendizado mais complexo (deve-se aprender
    o conceito e a sintaxe para cada linguagem)
●
    Maior utilização de recursos do servidor
    (quando comparado à outros paradigmas que o
    PHP suporta)
Pontos positivos da OOP
●
    Reutilização de código
●
    Extensibilidade
●
    Código facilmente testável (depende do
    desenvolvedor, claro =P)
●
    Desenvolvimento mais próximo do negócio
Conceitos básicos da OOP
Objeto
●
    Representação computacional de algo concreto
    e existente no mundo real
●
    Possui   características    (atributos)    e
    comportamentos (métodos)
Ciclo de vida de um objeto
Classe
●
    Descrição detalhada de um objeto e suas
    relações
●
    Segue as regras sintáticas da linguagem de
    programação para definir os atributos e
    comportamentos
<?php
namespace LcobucciExamples;

class Person
{
    private $name;

    public function talk($message)
    {
        echo $message;
    }
}
Instância
●
    Concretização da existência de um objeto;
    criação do objeto, seguindo as regras definidas
    na classe (previamente construída)
<?php
namespace LcobucciExamples;

class Person
{
    private $name;

    public function talk($message)
    {
        echo $message;
    }
}

$luis = new Person();
Visibilidade
●
    Existem coisas que nem todos precisam
    saber/ver...
●
    Define a acessibilidade dos dados (métodos,
    atributos) do objeto
●
    Tipos:
    ●
        public
    ●
        protected
    ●
        private
Herança
●
    Aproveitamento de métodos e atributos entre
    objetos de um mesmo contexto
<?php
namespace LcobucciExamples;

class Person
{
    private $name;

    public function talk($message)
    {
        echo $message;
    }
}

class Programmer extends Person
{
}
Herança
●
    Permite a alteração do comportamento dos
    métodos, caso necessário
<?php
namespace LcobucciExamples;
class Person
{
    private $name;
    public function talk($message)
    {
        echo $message;
    }
}

class Programmer extends Person
{
    public function talk($message)
    {
        parent::talk(md5($message));
    }
}
Abstração
●
    Definição “parcial” dos comportamentos dos
    objetos
●
    É definido que o comportamento existe, mas
    não é implementado, ou seja não tem
    necessidade da classe pai saber como o objeto
    age naquela ação
Abstração
●
    Podem ser definidas classes      abstratas,
    métodos abstratos e interfaces
●
    Classes abstratas não PODEM nunca ser
    instanciadas diretamente, é necessária uma
    classe filha
●
    Métodos abstratos são aqueles que devem ser
    implementados nas classes filhas
<?php
namespace LcobucciExamples;
abstract class Person
{
    private $name;
    public abstract function talk($message);
}

class Professor extends Person
{
    public function talk($message)
    {
        echo $message;
    }
}

class Programmer extends Person
{
    public function talk($message)
    {
        echo md5($message);
    }
}
Abstração
●
    Interfaces são estruturas que possuem apenas
    a definição dos comportamentos dos objetos
●
    Todos os comportamentos definidos em uma
    interface são SEMPRE acessíveis publicamente
●
    São utilizadas quando o contexto dos objetos
    são     diferentes,  porém     compartilham
    comportamentos
<?php
namespace LcobucciExamples;
interface Flyer
{
    public function fly();
}

class Bird implements Flyer
{
    public function fly()
    {
    }
}

class Airplane implements Flyer
{
    public function fly()
    {
    }
}
Polimorfismo
●
    A palavra polimorfismo tem origem grega,
    significa “muitas formas”
●
    Dentro da OOP, é a capacidade de um método
    agir de formas diferentes
●
    É possibilitado pela existência da abstração
    (herança ou implementação de interface), onde
    as classes implementam um mesmo método
    abstrato de formas diferentes
<?php
namespace LcobucciExamples;
interface PaymentMethod
{
    public function pay($ammount);
}

class CreditCard implements PaymentMethod
{
    public function pay($ammount)
    {
    }
}

class Money implements PaymentMethod
{
    public function pay($ammount)
    {
    }
}
<?php
namespace LcobucciExamples;

class Item
{
    private $price;

    public function sell(
        $quantity,
        PaymentMethod $paymentMethod
    ) {
        $paymentMethod->pay(
            $this->price * $quantity
        );
    }
}
Construtor e Destrutor
●
    Métodos que inicializam e destroem o estado
    do objeto
<?php
namespace LcobucciExamples;

class PersonList
{
    private $list;

    public function __construct()
    {
        $this->list = array();
    }

    public function __destruct()
    {
        $this->list = null;
    }
}
Design Patterns
Design patterns são soluções para necessidades
específicas e devem ser utilizados quando
necessário. Exemplos:

●
  Adapter              ●
                         Strategy
●
  Façade               ●
                         Decorator
●
  Factory              ●
                         Singleton
●
  Proxy
Design Patterns
Design patterns são soluções para necessidades
específicas e devem ser utilizados quando
necessário. Exemplos:

●
  Adapter              ●
                         Strategy
●
  Façade               ●
                         Decorator
●
  Factory              ●
                         Singleton (você não vai precisar)
●
  Proxy
Prepare-se, cenas fortes!
Prepare-se, cenas fortes!




                            Problemas comuns...
Idioma do código
●
    Mistura de idiomas dentro do código fonte
●
    Tradução dos nomes de forma equivocada
    (esquece-se que, principalmente, os métodos
    são ordens)
<?php
namespace LcobucciExamples;

class Pessoa
{
    private $name;
}
<?php
namespace LcobucciExamples;

$luis = new Pessoa();
$rex = new Cachorro();
$graveto = new Galho();

$luis->jogar($graveto);
$rex->pegar($graveto);




             Isso não soa estranho??
Herança sem sentido
●
    Herança não é apenas compartilhamento de
    comportamentos!
●
    O contexto das classes filhas não podem ser
    diferentes da classe pai
<?php
namespace LcobucciExamples;

class Passaro
{
    public function voa()
    {
    }
}

class Aviao extends Passaro
{
}
             Avião também voa, mas não
                   é um pássaro!!!
Causa raiz
●
    O maior problema do desenvolvimento por si
    só é a falta de planejamento, na orientação a
    objetos essa falta pode causar problemas muito
    sérios, tornando a manutenção do software
    extramente exaustiva e trabalhosa.
Implementação e comparação...
Transferência entre contas
bancárias
●
    O saldo da conta da Sílvia possui R$ 200,00
●
    O saldo da conta da Maria possui R$ 30,00
●
    Maria está com dificuldades financeiras, e pede
    à Sílvia um empréstimo de R$ 100,00
<?php
$saldoContaSilvia = 200;
$saldoContaMaria = 30;

$saldoContaSilvia -= 100;
$saldoContaMaria += 100;
<?php
namespace LcobucciExamples;

class ContaBancaria
{
    public $saldo;

    public function __construct($saldo)
    {
        $this->saldo = $saldo;
    }

    public function transfere(
        ContaBancaria $destino,
        $valor
    ) {
        $this->saldo -= $valor;
        $destino->saldo += $valor;
    }
}
<?php
namespace LcobucciExamples;

$contaSilvia = new ContaBancaria(200);
$contaMaria = new ContaBancaria(30);

$contaSilvia->transfere($contaMaria, 100);
Mais informações? Onde??
●
    Head first Object-Oriented Analysis & Desing
    http://www.headfirstlabs.com/books/hfooad/
●
    Programando com Orientação a Objetos
    http://www.adianti.com.br/phpoo
●
    Domain Driven Design
    http://domaindrivendesign.org/books/evans_2003
●
    Clean Code: A Handbook of Agile Software
    Craftsmanship
    http://goo.gl/Qyhmq
Obrigado!

Eu por aí: http://about.me/lcobucci
Slides: http://slideshare.net/lcobucci

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)Bruno Pedro
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...George Mendonça
 
[Lógica] Orientação a Objetos descomplicada
[Lógica] Orientação a Objetos descomplicada[Lógica] Orientação a Objetos descomplicada
[Lógica] Orientação a Objetos descomplicadaEduardo Ricoldi
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 

Was ist angesagt? (20)

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...
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Poo
PooPoo
Poo
 
Amarração e escopo
Amarração e escopoAmarração e escopo
Amarração e escopo
 
Unidade04
Unidade04Unidade04
Unidade04
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Clean code
Clean codeClean code
Clean code
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
OOP (in portuguese)
OOP (in portuguese)OOP (in portuguese)
OOP (in portuguese)
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 
[Lógica] Orientação a Objetos descomplicada
[Lógica] Orientação a Objetos descomplicada[Lógica] Orientação a Objetos descomplicada
[Lógica] Orientação a Objetos descomplicada
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 

Ähnlich wie (Re)pensando a OOP - TDC 2012

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
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013Luís Cobucci
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Luís Cobucci
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
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
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
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
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPablo Dall'Oglio
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 

Ähnlich wie (Re)pensando a OOP - TDC 2012 (20)

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
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Solid
SolidSolid
Solid
 
(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013(Re)pensando a OOP - PHPDay Curitiba 2013
(Re)pensando a OOP - PHPDay Curitiba 2013
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
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
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
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
 
PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a Objetos
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 

(Re)pensando a OOP - TDC 2012

  • 1. (Re)Pensando a Orientação a Objetos Luís Otávio Cobucci Oblonczyk 25 de Agosto de 2012
  • 2. Luís Otávio Cobucci Oblonczyk ● Evangelista (doido por) PHP ● Desenvolvedor na Softnex Tecnologia (SC) ● Membro do PHPSC ● ZCE PHP 5.3 ● Perfeccionista ao extremo =P @lcobucci http://about.me/lcobucci
  • 3. Orientação a Objetos muda nossa vida?
  • 4. O que é OOP? “Orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos.” http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
  • 5. O que é OOP? ● Paradigma = Padrão a ser seguido; Pressuposto filosófico ● Busca tornar o mundo das linguagens que os computadores entendem mais próximo da realidade
  • 6. A mudança principal é como pensamos!
  • 8. História da OOP ● Os termos “objetos” e “instâncias” foram utilizados por volta da década de 60 ● O conceito formal foi introduzido (também nos anos 60) na linguagem de programação Simula 67 ● Na década de 70 foi lançada, na Xerox PARC, a linguagem Smalltalk, que teve influências de conceitos da Simula 67
  • 9. Linguagens e OOP ● Funcionalidades OOP adicionadas como extensão ● Principalmente OOP ● Puramente OOP
  • 11. Porque repensar a OOP? Não, eu não sou pago por colocar tirinhas do vida de programador nas minhas palestas. Bem que podia né? =P
  • 12. Pontos negativos da OOP ● Aprendizado mais complexo (deve-se aprender o conceito e a sintaxe para cada linguagem) ● Maior utilização de recursos do servidor (quando comparado à outros paradigmas que o PHP suporta)
  • 13. Pontos positivos da OOP ● Reutilização de código ● Extensibilidade ● Código facilmente testável (depende do desenvolvedor, claro =P) ● Desenvolvimento mais próximo do negócio
  • 15. Objeto ● Representação computacional de algo concreto e existente no mundo real ● Possui características (atributos) e comportamentos (métodos)
  • 16. Ciclo de vida de um objeto
  • 17. Classe ● Descrição detalhada de um objeto e suas relações ● Segue as regras sintáticas da linguagem de programação para definir os atributos e comportamentos
  • 18. <?php namespace LcobucciExamples; class Person { private $name; public function talk($message) { echo $message; } }
  • 19. Instância ● Concretização da existência de um objeto; criação do objeto, seguindo as regras definidas na classe (previamente construída)
  • 20. <?php namespace LcobucciExamples; class Person { private $name; public function talk($message) { echo $message; } } $luis = new Person();
  • 21. Visibilidade ● Existem coisas que nem todos precisam saber/ver... ● Define a acessibilidade dos dados (métodos, atributos) do objeto ● Tipos: ● public ● protected ● private
  • 22. Herança ● Aproveitamento de métodos e atributos entre objetos de um mesmo contexto
  • 23. <?php namespace LcobucciExamples; class Person { private $name; public function talk($message) { echo $message; } } class Programmer extends Person { }
  • 24. Herança ● Permite a alteração do comportamento dos métodos, caso necessário
  • 25. <?php namespace LcobucciExamples; class Person { private $name; public function talk($message) { echo $message; } } class Programmer extends Person { public function talk($message) { parent::talk(md5($message)); } }
  • 26. Abstração ● Definição “parcial” dos comportamentos dos objetos ● É definido que o comportamento existe, mas não é implementado, ou seja não tem necessidade da classe pai saber como o objeto age naquela ação
  • 27. Abstração ● Podem ser definidas classes abstratas, métodos abstratos e interfaces ● Classes abstratas não PODEM nunca ser instanciadas diretamente, é necessária uma classe filha ● Métodos abstratos são aqueles que devem ser implementados nas classes filhas
  • 28. <?php namespace LcobucciExamples; abstract class Person { private $name; public abstract function talk($message); } class Professor extends Person { public function talk($message) { echo $message; } } class Programmer extends Person { public function talk($message) { echo md5($message); } }
  • 29. Abstração ● Interfaces são estruturas que possuem apenas a definição dos comportamentos dos objetos ● Todos os comportamentos definidos em uma interface são SEMPRE acessíveis publicamente ● São utilizadas quando o contexto dos objetos são diferentes, porém compartilham comportamentos
  • 30. <?php namespace LcobucciExamples; interface Flyer { public function fly(); } class Bird implements Flyer { public function fly() { } } class Airplane implements Flyer { public function fly() { } }
  • 31. Polimorfismo ● A palavra polimorfismo tem origem grega, significa “muitas formas” ● Dentro da OOP, é a capacidade de um método agir de formas diferentes ● É possibilitado pela existência da abstração (herança ou implementação de interface), onde as classes implementam um mesmo método abstrato de formas diferentes
  • 32. <?php namespace LcobucciExamples; interface PaymentMethod { public function pay($ammount); } class CreditCard implements PaymentMethod { public function pay($ammount) { } } class Money implements PaymentMethod { public function pay($ammount) { } }
  • 33. <?php namespace LcobucciExamples; class Item { private $price; public function sell( $quantity, PaymentMethod $paymentMethod ) { $paymentMethod->pay( $this->price * $quantity ); } }
  • 34. Construtor e Destrutor ● Métodos que inicializam e destroem o estado do objeto
  • 35. <?php namespace LcobucciExamples; class PersonList { private $list; public function __construct() { $this->list = array(); } public function __destruct() { $this->list = null; } }
  • 36. Design Patterns Design patterns são soluções para necessidades específicas e devem ser utilizados quando necessário. Exemplos: ● Adapter ● Strategy ● Façade ● Decorator ● Factory ● Singleton ● Proxy
  • 37. Design Patterns Design patterns são soluções para necessidades específicas e devem ser utilizados quando necessário. Exemplos: ● Adapter ● Strategy ● Façade ● Decorator ● Factory ● Singleton (você não vai precisar) ● Proxy
  • 39. Prepare-se, cenas fortes! Problemas comuns...
  • 40. Idioma do código ● Mistura de idiomas dentro do código fonte ● Tradução dos nomes de forma equivocada (esquece-se que, principalmente, os métodos são ordens)
  • 42. <?php namespace LcobucciExamples; $luis = new Pessoa(); $rex = new Cachorro(); $graveto = new Galho(); $luis->jogar($graveto); $rex->pegar($graveto); Isso não soa estranho??
  • 43. Herança sem sentido ● Herança não é apenas compartilhamento de comportamentos! ● O contexto das classes filhas não podem ser diferentes da classe pai
  • 44. <?php namespace LcobucciExamples; class Passaro { public function voa() { } } class Aviao extends Passaro { } Avião também voa, mas não é um pássaro!!!
  • 45. Causa raiz ● O maior problema do desenvolvimento por si só é a falta de planejamento, na orientação a objetos essa falta pode causar problemas muito sérios, tornando a manutenção do software extramente exaustiva e trabalhosa.
  • 47. Transferência entre contas bancárias ● O saldo da conta da Sílvia possui R$ 200,00 ● O saldo da conta da Maria possui R$ 30,00 ● Maria está com dificuldades financeiras, e pede à Sílvia um empréstimo de R$ 100,00
  • 48. <?php $saldoContaSilvia = 200; $saldoContaMaria = 30; $saldoContaSilvia -= 100; $saldoContaMaria += 100;
  • 49. <?php namespace LcobucciExamples; class ContaBancaria { public $saldo; public function __construct($saldo) { $this->saldo = $saldo; } public function transfere( ContaBancaria $destino, $valor ) { $this->saldo -= $valor; $destino->saldo += $valor; } }
  • 50. <?php namespace LcobucciExamples; $contaSilvia = new ContaBancaria(200); $contaMaria = new ContaBancaria(30); $contaSilvia->transfere($contaMaria, 100);
  • 51. Mais informações? Onde?? ● Head first Object-Oriented Analysis & Desing http://www.headfirstlabs.com/books/hfooad/ ● Programando com Orientação a Objetos http://www.adianti.com.br/phpoo ● Domain Driven Design http://domaindrivendesign.org/books/evans_2003 ● Clean Code: A Handbook of Agile Software Craftsmanship http://goo.gl/Qyhmq
  • 52. Obrigado! Eu por aí: http://about.me/lcobucci Slides: http://slideshare.net/lcobucci