(Re)pensando a OOP - Flisol Gyn

1.172 visualizações

Publicada em

Nosso objetivo principal é o encorajamento do estudo e conhecimento do paradigma orientação a objetos, revendo os conceitos básicos e os problemas comuns que caímos por falta de conhecimento e planejamento.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.172
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

(Re)pensando a OOP - Flisol Gyn

  1. 1. (Re)Pensando aOrientação a Objetos(Re)Pensando aOrientação a ObjetosLuís Otávio Cobucci Oblonczyk28 de Abril de 2012Goiânia
  2. 2. Luís Otávio Cobucci OblonczykLuí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@lcobuccihttp://about.me/lcobucci
  3. 3. Orientação a Objetos muda nossa vida?
  4. 4. O que é OOP?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?O que é OOP?●Paradigma = Padrão a ser seguido; Pressupostofilosófico●Busca tornar o mundo das linguagens que oscomputadores entendem mais próximo darealidade
  6. 6. A mudança principal é como pensamos!
  7. 7. Pequeno exercício mental...
  8. 8. História da OOPHistória da OOP●Os termos “objetos” e “instancias” foramutilizados por volta dia década de 60●O conceito formal foi introduzido (também nosanos 60) na linguagem de programação Simula67●Na década de 70 foi lançada, na Xerox PARC, alinguagem Smalltalk, que teve influencias deconceitos da Simula 67
  9. 9. Linguagens e OOPLinguagens e OOP●Funcionalidades OOP adicionadas comoextensão●Principalmente OOP●Puramente OOP
  10. 10. Porque repensar a OOP?Porque repensar a OOP?
  11. 11. Pontos negativos da OOPPontos negativos da OOP●Aprendizado mais complexo (deve-se aprendero conceito e a sintaxe para cada linguagem)●Maior utilização de memória
  12. 12. Pontos positivos da OOPPontos positivos da OOP●Reutilização de código●Extensibilidade●Desenvolvimento mais próximo do negócio(domínio)
  13. 13. Conceitos básicos da OOP
  14. 14. ObjetoObjeto●Representação computacional de algo concretoe existente no mundo real●Possui características (atributos) ecomportamentos (métodos)
  15. 15. ClasseClasse●Descrição detalhada de um objeto e suasrelações●Segue as regras sintáticas da linguagem deprogramação para definir os atributos ecomportamentos
  16. 16. <?phpnamespace LcobucciExamples;class Person{private $name;public function talk($message){echo $message;}}
  17. 17. InstânciaInstância●Concretização da existência de um objeto;criação do objeto, seguindo as regras definidasna classe (previamente construída)
  18. 18. <?phpnamespace LcobucciExamples;class Person{private $name;public function talk($message){echo $message;}}$luis = new Person();
  19. 19. VisibilidadeVisibilidade●Existem coisas que nem todos precisamsaber/ver...●Define a acessibilidade dos dados (métodos,atributos) do objeto●Tipos:●public●protected●private
  20. 20. HerançaHerança●Aproveitamento de métodos e atributos entreobjetos de um mesmo contexto
  21. 21. <?phpnamespace LcobucciExamples;class Person{private $name;public function talk($message){echo $message;}}class Programmer extends Person{}
  22. 22. HerançaHerança●Permite a alteração do comportamento dosmétodos, caso necessário
  23. 23. <?phpnamespace LcobucciExamples;class Person{private $name;public function talk($message){echo $message;}}class Programmer extends Person{public function talk($message){parent::talk(md5($message));}}
  24. 24. AbstraçãoAbstração●Definição “parcial” dos comportamentos dosobjetos●É definido que o comportamento existe, masnão é implementado, ou seja não temnecessidade da classe pai saber como o objetoage naquela ação
  25. 25. AbstraçãoAbstração●Podem ser definidas classes abstratas,métodos abstratos e interfaces●Classes abstratas não PODEM nunca serinstanciadas diretamente, é necessária umaclasse filha●Métodos abstratos são aqueles que devem serimplementados nas classes filhas
  26. 26. <?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);}}
  27. 27. AbstraçãoAbstração●Interfaces são estruturas que possuem apenasa definição dos comportamentos dos objetos●Todos os comportamentos definidos em umainterface são SEMPRE acessíveis publicamente●São utilizadas quando o contexto dos objetossão diferentes, porém compartilhamcomportamentos
  28. 28. <?phpnamespace LcobucciExamples;interface Flyer{public function fly();}class Bird implements Flyer{public function fly(){}}class Airplane implements Flyer{public function fly(){}}
  29. 29. PolimorfismoPolimorfismo●A palavra polimorfismo tem origem grega,significa “muitas formas”●Dentro da OOP, é a capacidade de um métodoagir de formas diferentes●É possibilitado pela existência da abstração(herança ou implementação de interface), ondeas classes implementam um mesmo métodoabstrato de formas diferentes
  30. 30. <?phpnamespace LcobucciExamples;interface PaymentMethod{public function pay($ammount);}class CreditCard implements PaymentMethod{public function pay($ammount){}}class Money implements PaymentMethod{public function pay($ammount){}}
  31. 31. <?phpnamespace LcobucciExamples;class Item{private $price;public function sell($quantity,PaymentMethod $paymentMethod) {$paymentMethod->pay($this->price * $quantity);}}
  32. 32. Construtor e DestrutorConstrutor e Destrutor●Métodos que inicializam e destroem o estadodo objeto
  33. 33. <?phpnamespace LcobucciExamples;class PersonList{private $list;public function __construct(){$this->list = array();}public function __destruct(){$this->list = null;}}
  34. 34. Prepare-se, cenas fortes!
  35. 35. Prepare-se, cenas fortes!Prepare-se, cenas fortes!Problemas comuns...
  36. 36. Idioma do códigoIdioma do código●Mistura de idiomas dentro do código fonte●Tradução dos nomes de forma equivocada(esquece-se que, principalmente, os métodossão ordens)
  37. 37. <?phpnamespace LcobucciExamples;class Pessoa{private $name;}
  38. 38. <?phpnamespace LcobucciExamples;$luis = new Pessoa();$rex = new Cachorro();$graveto = new Galho();$luis->jogar($graveto);$rex->pegar($graveto);Isso não soa estranho??
  39. 39. Herança sem sentidoHerança sem sentido●Herança não é apenas compartilhamento decomportamentos!●O contexto das classes filhas não podem serdiferentes da classe pai
  40. 40. <?phpnamespace LcobucciExamples;class Passaro{public function voa(){}}class Aviao extends Passaro{}Avião também voa, mas nãoé um pássaro!!!
  41. 41. Causa raizCausa raiz●O maior problema do desenvolvimento por sisó é a falta de planejamento, na orientação aobjetos essa falta pode causar problemas muitosérios, tornando a manutenção do softwarebem trabalhosa.
  42. 42. Implementação e comparação...
  43. 43. Transferência entre contasbancáriasTransferê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
  44. 44. <?php$saldoContaSilvia = 200;$saldoContaMaria = 30;$saldoContaSilvia -= 100;$saldoContaMaria += 100;
  45. 45. <?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;}}
  46. 46. <?phpnamespace LcobucciExamples;$contaSilvia = new ContaBancaria(200);$contaMaria = new ContaBancaria(30);$contaSilvia->transfere($contaMaria, 100);
  47. 47. Mais informações? Onde??Mais informações? Onde??●Head first Object-Oriented Analysis & Desinghttp://www.headfirstlabs.com/books/hfooad/●Programando com Orientação a Objetoshttp://www.adianti.com.br/phpoo●Domain Driven Designhttp://domaindrivendesign.org/books/evans_2003●Clean Code: A Handbook of Agile SoftwareCraftsmanshiphttp://goo.gl/Qyhmq
  48. 48. Obrigado!Obrigado!Eu por aí: http://about.me/lcobucciSlides: http://slideshare.net/lcobucci

×