Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Padrões de Projeto Facade em Linguagens Dinâmicas

Padrões de Projeto Facade em Linguagens Dinâmicas

Padrões de projeto é um conceito muito importante em programação. Esta apresentação abordará conceitos de padrões de projeto e explorará o padrão façade no contexto de linguagens dinâmicas.

52711e2157a6fed933b0361cc06a6953?s=128

Marcel dos Santos

November 16, 2016
Tweet

Transcript

  1. Marcel Gonçalves dos Santos @marcelgsantos em linguagens dinâmicas padrões de

    projeto Façade
  2. pensandonaweb.com.br desenvolvedor web full-stack Marcel Gonçalves dos Santos @marcelgsantos

  3. None
  4. @phpsp phpsp.org.br

  5. @femugsp sp.femug.com

  6. Learning OOP in PHP Tutoriais, vídeos, slides, livros sobre OOP,

    OOD, padrões de projetos, refatoração e arquitetura. bit.ly/Learning-OOP-in-PHP
  7. O que são padrões de projeto?

  8. o projeto de software orientado a objetos é difícil

  9. o projeto de software reutilizável orientado a objetos é ainda

    mais difícil
  10. costumamos utilizar soluções que funcionaram anteriormente

  11. quando encontramos boas soluções, utilizamos elas repetidamente

  12. e encontramos padrões de classes e de comunicação entre objetos…

  13. …que reaparecem frequentemente em sistemas orientados a objetos

  14. cada padrão de projeto sistematicamente nomeia, explica e avalia um

    aspecto importante e recorrente em sistemas orientado o objetos
  15. os padrões de projetos, segundo o GoF, são descrições de

    objetos e classes comunicantes…
  16. …que precisam ser persona- lizadas para resolver um problema geral

    de projeto num contexto particular
  17. Elementos essenciais de um padrão de projeto

  18. um padrão de projeto tem quatro elementos essenciais

  19. os elementos são nome do padrão, problema, solução e consequências

  20. Classificação dos padrões de projeto

  21. os padrões de projetos podem ser de criação, estrutural ou

    comportamental
  22. Padrões estruturais

  23. os padrões estruturais se preocupam com a forma como classes

    e objetos são compostos para formar estruturas maiores
  24. Façade é um padrão de projeto estrutural

  25. Padrão de projeto 
 Façade

  26. Intenção

  27. fornecer uma interface unificada para um conjunto de interfaces em

    um subsistema
  28. definir uma interface de nível mais alto que torna o

    subsistema mais fácil de ser usado
  29. Motivação

  30. estruturar um sistema em subsistemas ajuda a reduzir a complexidade

  31. um objetivo de todos os projetos é minimizar a comunicação

    e as dependências entre subsistemas
  32. uma maneira de atingir este objetivo é introduzir um objeto

    façade…
  33. …ele fornece uma interface única e simplificada para os recursos

    e facilidades mais gerais de um subsistema
  34. uma façade é uma interface entre classes-clientes e classes do

    subsistema
  35. None
  36. uma façade torna a vida mais fácil para a maioria

    dos programadores…
  37. …sem ocultar a funcionalidade de nível mais baixo dos poucos

    que a necessitam
  38. Aplicabilidade

  39. devemos usar uma façade quando…

  40. desejamos fornecer uma interface simples para um subsistema complexo

  41. existirem muitas dependên- cias entre clientes e classes de implementação

    de uma abstração
  42. desejamos estruturar nossos subsistemas em camadas

  43. Estrutura

  44. None
  45. Participantes

  46. Façade

  47. conhece quais as classes do subsistema são responsáveis pelo atendimento

    de uma solicitação
  48. delega solicitações de clientes a objetos apropriados do subsistema

  49. Classes de subsistema

  50. implementam a funcionalidade do subsistema

  51. encarregam-se do trabalho atribuído a elas pelo objeto façade

  52. não tem conhecimento da façade, ou seja, não mantêm referências

    para a mesma
  53. Colaborações

  54. os clientes se comunicam com um subsistema através do envio

    de solicitações para a façade…
  55. …que as repassa para os objetos apropriados do subsistema

  56. a façade pode ter código próprio para poder traduzir a

    sua interface para as interfaces de subsistemas
  57. os clientes que utilizam uma façade não acessam os objetos

    do subsistema diretamente
  58. Consequências

  59. Benefícios

  60. isola os clientes dos componentes do subsistema…

  61. …reduzindo o número de objetos que os clientes têm que

    lidar e tornando o sub- sistema mais fácil de usar
  62. promove um acoplamento fraco entre o subsistema e seus clientes

  63. não impedem as aplicações utilizar as classes do subsistema caso

    necessitem
  64. Implementação

  65. // Complex Parts interface BiosInterface { public function execute(); public

    function waitForKeyPress(); public function launch(OsInterface $os); public function powerDown(); } interface OsInterface { public function halt(); public function getName(): string; }
  66. // Facade class Facade { private $os; private $bios; public

    function __construct(BiosInterface $bios, OsInterface $os) { $this->bios = $bios; $this->os = $os; } public function turnOn() { $this->bios->execute(); $this->bios->waitForKeyPress(); $this->bios->launch($this->os); } public function turnOff() { $this->os->halt(); $this->bios->powerDown(); } }
  67. # Complex Parts class CPU def freeze; end def jump(position);

    end def execute; end end class Memory def load(position, data); end end class HardDrive def read(lba, size); end end
  68. # Facade class ComputerFacade def initialize @processor = CPU.new @ram

    = Memory.new @hd = HardDrive.new end def start @processor.freeze @ram.load(BOOT_ADDRESS, @hd.read(BOOT_SECTOR, SECTOR_SIZE)) @processor.jump(BOOT_ADDRESS) @processor.execute end end
  69. # Client computer_facade = ComputerFacade.new computer_facade.start

  70. Linguagens Dinâmicas

  71. segundo Peter Norvig, o padrão façade com módulos é invisível

  72. não é necessário classes e objetos para bookkeeping

  73. basta exportar os nomes que compõem a interface

  74. Usos Conhecidos

  75. Padrões Relacionados

  76. * Abstract Factory * Mediator * Singleton

  77. Referências

  78. * Padrões de Projeto, GoF * https:/ /pt.wikipedia.org/wiki/Façade * https:/

    /github.com/domnikl/ DesignPatternsPHP * https:/ /garoa.net.br/wiki/ Design_patterns_em_linguagens_dinâ micas
  79. Perguntas?

  80. Obrigado. @marcelgsantos speakerdeck.com/marcelgsantos