(Re)Pensando a     Orientação a Objetos      Luís Otávio Cobucci Oblonczyk25 de Agosto de 2012
Luís Otávio Cobucci Oblonczyk●    Evangelista (doido por) PHP●    Desenvolvedor na Softnex Tecnologia (SC)●    Membro do P...
Orientação a Objetos muda nossa vida?
O que é OOP?“Orientação a objetos é um paradigma deanálise, projeto e programação de sistemas desoftware baseado na compos...
O que é OOP?●    Paradigma = Padrão a ser seguido; Pressuposto    filosófico●    Busca tornar o mundo das linguagens que o...
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...
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 porcolocar tirinhas do vida deprogramador nas minhaspalestas.Bem que podia né? =P
Pontos negativos da OOP●    Aprendizado mais complexo (deve-se aprender    o conceito e a sintaxe para cada linguagem)●   ...
Pontos positivos da OOP●    Reutilização de código●    Extensibilidade●    Código facilmente testável (depende do    desen...
Conceitos básicos da OOP
Objeto●    Representação computacional de algo concreto    e existente no mundo real●    Possui   características    (atri...
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ç...
<?phpnamespace LcobucciExamples;class Person{    private $name;    public function talk($message)    {        echo $messag...
Instância●    Concretização da existência de um objeto;    criação do objeto, seguindo as regras definidas    na classe (p...
<?phpnamespace LcobucciExamples;class Person{    private $name;    public function talk($message)    {        echo $messag...
Visibilidade●    Existem coisas que nem todos precisam    saber/ver...●    Define a acessibilidade dos dados (métodos,    ...
Herança●    Aproveitamento de métodos e atributos entre    objetos de um mesmo contexto
<?phpnamespace LcobucciExamples;class Person{    private $name;    public function talk($message)    {        echo $messag...
Herança●    Permite a alteração do comportamento dos    métodos, caso necessário
<?phpnamespace LcobucciExamples;class Person{    private $name;    public function talk($message)    {        echo $messag...
Abstração●    Definição “parcial” dos comportamentos dos    objetos●    É definido que o comportamento existe, mas    não ...
Abstração●    Podem ser definidas classes      abstratas,    métodos abstratos e interfaces●    Classes abstratas não PODE...
<?phpnamespace LcobucciExamples;abstract class Person{    private $name;    public abstract function talk($message);}class...
Abstração●    Interfaces são estruturas que possuem apenas    a definição dos comportamentos dos objetos●    Todos os comp...
<?phpnamespace LcobucciExamples;interface Flyer{    public function fly();}class Bird implements Flyer{    public function...
Polimorfismo●    A palavra polimorfismo tem origem grega,    significa “muitas formas”●    Dentro da OOP, é a capacidade d...
<?phpnamespace LcobucciExamples;interface PaymentMethod{    public function pay($ammount);}class CreditCard implements Pay...
<?phpnamespace LcobucciExamples;class Item{    private $price;    public function sell(        $quantity,        PaymentMe...
Construtor e Destrutor●    Métodos que inicializam e destroem o estado    do objeto
<?phpnamespace LcobucciExamples;class PersonList{    private $list;    public function __construct()    {        $this->li...
Design PatternsDesign patterns são soluções para necessidadesespecíficas e devem ser utilizados quandonecessário. Exemplos...
Design PatternsDesign patterns são soluções para necessidadesespecíficas e devem ser utilizados quandonecessário. Exemplos...
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 q...
<?phpnamespace LcobucciExamples;class Pessoa{    private $name;}
<?phpnamespace LcobucciExamples;$luis = new Pessoa();$rex = new Cachorro();$graveto = new Galho();$luis->jogar($graveto);$...
Herança sem sentido●    Herança não é apenas compartilhamento de    comportamentos!●    O contexto das classes filhas não ...
<?phpnamespace LcobucciExamples;class Passaro{    public function voa()    {    }}class Aviao extends Passaro{}           ...
Causa raiz●    O maior problema do desenvolvimento por si    só é a falta de planejamento, na orientação a    objetos essa...
Implementação e comparação...
Transferência entre contasbancárias●    O saldo da conta da Sílvia possui R$ 200,00●    O saldo da conta da Maria possui R...
<?php$saldoContaSilvia = 200;$saldoContaMaria = 30;$saldoContaSilvia -= 100;$saldoContaMaria += 100;
<?phpnamespace LcobucciExamples;class ContaBancaria{    public $saldo;    public function __construct($saldo)    {        ...
<?phpnamespace LcobucciExamples;$contaSilvia = new ContaBancaria(200);$contaMaria = new ContaBancaria(30);$contaSilvia->tr...
Mais informações? Onde??●    Head first Object-Oriented Analysis & Desing    http://www.headfirstlabs.com/books/hfooad/●  ...
Obrigado!Eu por aí: http://about.me/lcobucciSlides: http://slideshare.net/lcobucci
Próximos SlideShares
Carregando em…5
×

(Re)pensando a OOP - TDC 2012

774 visualizações

Publicada em

O objetivo principal desta palestra é rever os conceitos básicos da Orientação à Objetos, buscando remover aquilo que foi deturpado com o tempo.

2 comentários
2 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
774
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
20
Comentários
2
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

(Re)pensando a OOP - TDC 2012

  1. 1. (Re)Pensando a Orientação a Objetos Luís Otávio Cobucci Oblonczyk25 de Agosto de 2012
  2. 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. 3. Orientação a Objetos muda nossa vida?
  4. 4. O que é OOP?“Orientação a objetos é um paradigma deanálise, projeto e programação de sistemas desoftware baseado na composição e interaçãoentre diversas unidades de software chamadas deobjetos.”http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
  5. 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. 6. A mudança principal é como pensamos!
  7. 7. Pequeno exercício mental...
  8. 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. 9. Linguagens e OOP● Funcionalidades OOP adicionadas como extensão● Principalmente OOP● Puramente OOP
  10. 10. Porque repensar a OOP?
  11. 11. Porque repensar a OOP?Não, eu não sou pago porcolocar tirinhas do vida deprogramador nas minhaspalestas.Bem que podia né? =P
  12. 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. 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
  14. 14. Conceitos básicos da OOP
  15. 15. Objeto● Representação computacional de algo concreto e existente no mundo real● Possui características (atributos) e comportamentos (métodos)
  16. 16. Ciclo de vida de um objeto
  17. 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. 18. <?phpnamespace LcobucciExamples;class Person{ private $name; public function talk($message) { echo $message; }}
  19. 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. 20. <?phpnamespace LcobucciExamples;class Person{ private $name; public function talk($message) { echo $message; }}$luis = new Person();
  21. 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. 22. Herança● Aproveitamento de métodos e atributos entre objetos de um mesmo contexto
  23. 23. <?phpnamespace LcobucciExamples;class Person{ private $name; public function talk($message) { echo $message; }}class Programmer extends Person{}
  24. 24. Herança● Permite a alteração do comportamento dos métodos, caso necessário
  25. 25. <?phpnamespace LcobucciExamples;class Person{ private $name; public function talk($message) { echo $message; }}class Programmer extends Person{ public function talk($message) { parent::talk(md5($message)); }}
  26. 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. 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. 28. <?phpnamespace 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. 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. 30. <?phpnamespace LcobucciExamples;interface Flyer{ public function fly();}class Bird implements Flyer{ public function fly() { }}class Airplane implements Flyer{ public function fly() { }}
  31. 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. 32. <?phpnamespace LcobucciExamples;interface PaymentMethod{ public function pay($ammount);}class CreditCard implements PaymentMethod{ public function pay($ammount) { }}class Money implements PaymentMethod{ public function pay($ammount) { }}
  33. 33. <?phpnamespace LcobucciExamples;class Item{ private $price; public function sell( $quantity, PaymentMethod $paymentMethod ) { $paymentMethod->pay( $this->price * $quantity ); }}
  34. 34. Construtor e Destrutor● Métodos que inicializam e destroem o estado do objeto
  35. 35. <?phpnamespace LcobucciExamples;class PersonList{ private $list; public function __construct() { $this->list = array(); } public function __destruct() { $this->list = null; }}
  36. 36. Design PatternsDesign patterns são soluções para necessidadesespecíficas e devem ser utilizados quandonecessário. Exemplos:● Adapter ● Strategy● Façade ● Decorator● Factory ● Singleton● Proxy
  37. 37. Design PatternsDesign patterns são soluções para necessidadesespecíficas e devem ser utilizados quandonecessário. Exemplos:● Adapter ● Strategy● Façade ● Decorator● Factory ● Singleton (você não vai precisar)● Proxy
  38. 38. Prepare-se, cenas fortes!
  39. 39. Prepare-se, cenas fortes! Problemas comuns...
  40. 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)
  41. 41. <?phpnamespace LcobucciExamples;class Pessoa{ private $name;}
  42. 42. <?phpnamespace LcobucciExamples;$luis = new Pessoa();$rex = new Cachorro();$graveto = new Galho();$luis->jogar($graveto);$rex->pegar($graveto); Isso não soa estranho??
  43. 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. 44. <?phpnamespace LcobucciExamples;class Passaro{ public function voa() { }}class Aviao extends Passaro{} Avião também voa, mas não é um pássaro!!!
  45. 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.
  46. 46. Implementação e comparação...
  47. 47. Transferência entre contasbancá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. 48. <?php$saldoContaSilvia = 200;$saldoContaMaria = 30;$saldoContaSilvia -= 100;$saldoContaMaria += 100;
  49. 49. <?phpnamespace 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. 50. <?phpnamespace LcobucciExamples;$contaSilvia = new ContaBancaria(200);$contaMaria = new ContaBancaria(30);$contaSilvia->transfere($contaMaria, 100);
  51. 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. 52. Obrigado!Eu por aí: http://about.me/lcobucciSlides: http://slideshare.net/lcobucci

×