Objetos, Padrões e Prática

3.281 visualizações

Publicada em

Palestra apresentada na PHP Conference Brasil '08. Abrange Orientação a Objetos e Design Patterns.

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

Sem downloads
Visualizações
Visualizações totais
3.281
No SlideShare
0
A partir de incorporações
0
Número de incorporações
177
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
19
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Objetos, Padrões e Prática

  1. 1. Objetos, Padrões e Prática Anderson “Duodraco” Casimiro PHP Conference '08
  2. 2. Conteúdo <ul><li>Objetos e o PHP 5
  3. 3. Introdução a Design Patterns
  4. 4. Os principais padrões
  5. 5. Exemplo: Framework MVC
  6. 6. Conclusões </li></ul>
  7. 7. “ O mundo é orientado a objetos” Eu e com certeza um monte de gente por aí
  8. 8. Orientação a Objetos? <ul><li>Base da arquitetura de software moderna
  9. 9. Tornar problemas e unidades do mundo real em entidades computacionais
  10. 10. Melhor compreensão do software por equipes de análise e de desenvolvimento
  11. 11. Melhor definição da informação
  12. 12. Tudo é objeto! </li><ul><li>Alguém duvida? </li></ul></ul>
  13. 13. E no PHP5 ? <ul><li>OO Melhorada </li><ul><li>visibilidade, interfaces, constantes, etc </li></ul><li>Métodos Mágicos </li><ul><li>__get, __set, __construct, __destruct, __call, …
  14. 14. __autoload
  15. 15. __clone </li></ul><li>SPL – Standard PHP Library </li><ul><li>Iterators, Heap e Stack,Observer ... </li></ul></ul>
  16. 16. Definições <ul><li>Classes, Objetos e Interfaces
  17. 17. Métodos, Atributos e Constantes
  18. 18. Visibilidade: Public, Protected e Private
  19. 19. Static, Final, Abstract
  20. 20. Hierarquia
  21. 21. Sobrecarga e Polimorfismo </li></ul>
  22. 22. Classe <ul><li>O que é um Canis Familiaris ? </li><ul><li>Mamífero, Canino </li><ul><li>Atributos?
  23. 23. Ações? </li></ul></ul><li>Class Cachorro { } </li></ul>
  24. 24. Objeto <ul>- cor: “Branco” - raca: “T.B” - nome: “Max” - peso: 13 - idade: 4 +dormir($joke=false) +comer() +brincar() + … </ul>
  25. 25. Interface <ul><li>Definição de tipo
  26. 26. Definição de funcionalidade </li><ul><li>Não faz aplicação
  27. 27. Somente declara assinaturas de métodos (PHP)
  28. 28. Classes devem implementar os métodos </li></ul></ul>
  29. 29. Métodos, Atributos e Constantes <ul><li>Constantes – intocáveis </li><ul><li>const CONSTANTE = 1; </li></ul><li>Atributos – substantivos / adjetivos </li><ul><li>$atributo = “teste”; </li></ul><li>Métodos – verbos </li><ul><li>function metodo(Cachorro $cao, $bravo = false) </li></ul></ul>
  30. 30. Visibilidade <ul><li>Public </li><ul><li>Visível de qualquer lugar </li></ul><li>Protected </li><ul><li>Visível somente dentro da hierarquia </li></ul><li>Private </li><ul><li>Visível somente na classe </li></ul></ul>
  31. 31. Static <ul><li>Acesso sem instância
  32. 32. Atributos </li><ul><li>Somente valores escalares </li></ul><li>Métodos </li><ul><li>Em métodos estáticos não existe $this
  33. 33. Use self e parent </li><ul><li>self::$atributo, self::CONSTANTE, self::metodo() </li></ul></ul></ul>
  34. 34. Abstract e Final <ul><li>Abstract </li><ul><li>Esta classe não pode ser instanciada </li></ul><li>Final </li><ul><li>Esta classe não pode ser estendida
  35. 35. Este método/atributo não pode ser redeclarado </li><ul><li>polimorfismo </li></ul></ul></ul>
  36. 36. Herança <ul><li>extends
  37. 37. Filhos possuem todos os membros protected e public da classe Mãe
  38. 38. Semântica </li><ul><li>Regra “<x> é um <y>” </li></ul></ul>
  39. 39. Sobrecarga e Polimorfismo <ul><li>Polimorfismo: especializar um método em uma classe filha
  40. 40. Sobrecarga </li><ul><li>Utilizar a mesma chamada de método para ações distintas
  41. 41. Não nativo do PHP
  42. 42. __call </li></ul></ul>
  43. 43. Design Patterns <ul><li>O que é isso?
  44. 44. Onde isso vai me ajudar?
  45. 45. Bonito, mas isso se aplica no dia-a-dia?
  46. 46. Dá pra usar no PHP?
  47. 47. Acabaram-se os meus problemas? </li></ul>
  48. 48. O que é isso? <ul><li>Padrões de Projeto
  49. 49. Relação de soluções para problemas comuns
  50. 50. Termo nasceu na arquitetura (civil)
  51. 51. Ganhou espaço na programação com a publicação de Design Patterns: Elements of Reusable Object-Oriented Software </li><ul><li>Gang of Four </li></ul><li>NÃO é febre, NÃO é modinha
  52. 52. NÃO vai salvar sua vida naquele projeto que você tem que entregar na próxima segunda </li></ul>
  53. 53. Por que usar? <ul><li>Define um problema
  54. 54. Define uma solução
  55. 55. Independente de linguagem
  56. 56. Definem um vocabulário
  57. 57. São Experimentados e Testados
  58. 58. São Projetados para Colaboração
  59. 59. Promovem um bom projeto </li></ul>
  60. 60. “ Cada Padrão descreve um problema que ocorre várias vezes em nosso ambiente e, então, descreve o núcleo da solução para este problema, de forma que você possa usar essa solução um milhão de vezes sem fazê-lo da mesma forma duas vezes” Christopher Alexander
  61. 61. Tipos de Patterns <ul><li>Criacionais </li><ul><li>Singleton, Factory, Prototype </li></ul><li>Estruturais </li><ul><li>Composite, Decorator, Facade </li></ul><li>Comportamentais </li><ul><li>Strategy, Observer, Visitor </li></ul><li>Corporativos </li><ul><li>Registry, *Controller, Domain Model, Unit of Work </li><ul><li>* = [Front | Application | Page] </li></ul></ul></ul>
  62. 62. Singleton <ul><li>Garantir que uma só instancia seja gerada
  63. 63. Utiliza-se de um atributo static private
  64. 64. Exemplos de uso </li><ul><li>Log
  65. 65. Conexão com BD </li></ul></ul>
  66. 66. Singleton
  67. 67. Factory Method <ul><li>Expõe um método para a criação de objetos </li><ul><li>Permite às subclasses controlarem o processo
  68. 68. Retorno de uma Interface Específica </li></ul><li>Exemplos </li><ul><li>Envio de Email (Plain / HTML)
  69. 69. Produtos </li></ul></ul>
  70. 70. Factory Method
  71. 71. Prototype <ul><li>Cria objetos a partir de um “template”
  72. 72. Usar quando o “new” for muito custoso
  73. 73. Uso de clone </li><ul><li>clone $obj; </li></ul><li>Uso </li><ul><li>Utilização de cópias de objetos grandes
  74. 74. Processamento com objetos parecidos </li></ul></ul>
  75. 75. Prototype
  76. 76. Composite <ul><li>Facilita a criação e gestão de hierarquias </li><ul><li>Objetos independentes
  77. 77. Conjuntos de objetos aninhados </li></ul><li>Objetos e Composições de Objetos </li><ul><li>Tratados igualmente </li></ul><li>Exemplo </li><ul><li>Carrinho de compras </li><ul><li>Grupos de produtos </li></ul></ul></ul>
  78. 78. Composite
  79. 79. Decorator <ul><li>Permite a seleção dinâmica de objetos </li><ul><li>Modifica as responsabilidades e comportamentos </li></ul><li>Exemplo </li><ul><li>Mensagens em processos </li><ul><li>Requisição </li><ul><li>Autenticação
  80. 80. Carregamento
  81. 81. Log
  82. 82. Conexão </li></ul></ul></ul></ul>
  83. 83. Decorator
  84. 84. Facade <ul><li>Entrega uma interface simples para um sistema complexo
  85. 85. Abstração de subsistemas
  86. 86. Exemplo </li><ul><li>Script procedural de busca em itens.txt </li><ul><li>Funções espalhadas para várias tarefas </li></ul><li>Classe ProductFacade </li><ul><li>Interface para conseguir um produto
  87. 87. ItemFacade::getInstance('itens.txt')->getItem(2); </li></ul></ul></ul>
  88. 88. Facade
  89. 89. Strategy <ul><li>Define um conjunto de algorítimos encapsulados </li><ul><li>O objetivo é alcançar um comportamento específico </li></ul><li>Usado quando </li><ul><li>Algumas versões / variações de uma operação se fazem necessárias
  90. 90. O acesso ao algorítimo não deve ser exposto </li></ul></ul>
  91. 91. Strategy
  92. 92. Observer <ul><li>Permite que um ou mais objetos sejam notificados de alterações em outros objetos
  93. 93. Usado quando </li><ul><li>Mudanças de estado devem disparar ações
  94. 94. A notificação de estado deve ser “global” </li></ul><li>Exemplo </li><ul><li>Log global e/ou condicional </li></ul></ul>
  95. 95. Observer
  96. 96. Visitor <ul><li>Permite que uma ou mais operações sejam aplicadas a um conjunto de objetos </li><ul><li>Desacopladas da estrutura </li></ul><li>Usar quando </li><ul><li>A estrutura não pode mudar, mas as operações sim
  97. 97. Expor o estado interno é aceitável </li></ul><li>Exemplo </li><ul><li>Cálculo de impostos de regiões diferentes </li></ul></ul>
  98. 98. Visitor
  99. 99. Iterator <ul><li>Permite o acesso a elementos de umobjeto composto </li><ul><li>Objetos com coleções agregadas </li></ul><li>A SPL implementa esta interface </li><ul><li>Para o PHP o Iterator é tratado como objeto e array </li><ul><li>Podendo ser usado em funções de array e foreach </li></ul></ul></ul>
  100. 100. Iterator
  101. 101. MVC <ul><li>Model </li><ul><li>Responsável pela lógica de negócio
  102. 102. Informação </li></ul><li>View </li><ul><li>Apresentação </li></ul><li>Controller </li><ul><li>Decisisão </li></ul></ul>
  103. 103. MVC
  104. 104. Registry <ul><li>Usado para prover dados comuns a todo um sistema
  105. 105. Usado para substituir o uso de variáveis globais </li><ul><li>Também para manter uniforme a informação entre sessões e instâncias de aplicação </li></ul></ul>
  106. 106. Registry
  107. 107. Domain Model & Data Mapper <ul><li>Domain Model </li><ul><li>Gerencia objetos participantes da camada de negócio </li></ul><li>Data Mapper </li><ul><li>Classe especialista para gerir o tramite de Banco de Dados para as Domain Model </li></ul></ul>
  108. 108. Command <ul><li>Encapsula uma requisição de modo a tratá-la como objeto </li><ul><li>Isto permite que a requisição seja manipulada nos relacionamentos de objetos
  109. 109. Enfileiramento
  110. 110. Callbacks </li></ul></ul>
  111. 111. Command
  112. 112. FrontController <ul><li>Define um ponto único de entrada
  113. 113. Processa a requisição </li><ul><li>Seleciona a ação a ser tomada </li></ul><li>Cria um Controller ou um Command </li><ul><li>Estes executam de fato a requisição </li></ul></ul>
  114. 114. FrontController
  115. 115. ***Office <ul><li>Derivação de FrontController </li><ul><li>Daniel Oosterhuis </li></ul><li>Faz a seleção de protocolo
  116. 116. Obtem os parâmetros de requisição
  117. 117. Aí continua como um FrontController clássico </li></ul>
  118. 118. ***Office
  119. 119. <<FAKE>> Framework <ul><li>Sistema de configuração
  120. 120. Separação de camadas
  121. 121. Log de operações
  122. 122. Boa Estrutura
  123. 123. Fácil de Manter </li></ul>
  124. 124. <<FAKE>> Framework <ul><li>Singleton
  125. 125. Registry
  126. 126. Factory
  127. 127. FrontController </li></ul>
  128. 128. Perguntas ???
  129. 129. Referências <ul><li>Entendendo e Dominando o PHP </li><ul><li>PHP5 Objects, Patterns, Pratice
  130. 130. Matt Zandstra </li></ul><li>Design Patterns – Reference Card </li><ul><li>Jason McDonald
  131. 131. refcardz.com </li></ul></ul>
  132. 132. <ul><ul><li>Zend Certified Engineer – PHP5
  133. 133. duodraco.com
  134. 134. ophpen.org
  135. 135. Desenvolvedor há 6 anos </li><ul><li>PHP, CF, JS,MySQL, Postgre, SQLServer, DB2, Oracle
  136. 136. Hospitalar, RH, Comércio, Trânsito
  137. 137. Atualmente na Burti </li></ul><li>Contato </li><ul><li>[email_address]
  138. 138. anderson@ophpen.org </li></ul></ul></ul>

×