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

Além dos Paradigmas

Além dos Paradigmas

Entenda as características de Python e saiba escolher e adaptar padrões de projeto

Luciano Ramalho

April 01, 2018
Tweet

More Decks by Luciano Ramalho

Other Decks in Programming

Transcript

  1. Te o r i a a s e r v

    i ç o d a p r á t i c a ALÉM DOS PARADIGMAS Entenda as características da linguagem e saiba escolher e adaptar os padrões Luciano Ramalho @ramalhoorg
  2. FLUENT PYTHON, MEU 1º LIVRO Fluent Python (O’Reilly, 2015) Python

    Fluente (Novatec, 2015) Python к вершинам
 мастерства (DMK, 2015) 流暢的 Python (Gotop, 2016) also in Polish, Korean, etc… 3 4.7 stars at
 Amazon.com
  3. MDC EM PYTHON 11 Inadequado para Python que não faz

    otimização de chamada de cauda (TCO) Estilo imperativo Estilo funcional
  4. OUTRO LIVRO, OUTRA CLASSIFICAÇÃO Princípios de Linguagens de Programação
 (2003)

    Ana Cristina Vieira de Melo Flávio Soares Corrêa da Silva 15
  5. 16

  6. GOF: LIVRO CLÁSSICO DA “GANG OF FOUR” Design Patterns: Elements

    of Reusable Object-Oriented Software (1995) Erich Gamma
 Richard Helm
 Ralph Johnson
 John Vlissides 41
  7. PROBLEMAS NA DIFUSÃO DOS PADRÕES 43 Ralph Johnson no IME/USP

    (2014?) Excesso de ênfase nos padrões como resultados finais em vez de passos no processo de design
  8. PROBLEMAS NA DIFUSÃO DOS PADRÕES 44 Ralph Johnson no IME/USP

    (2014?) Conformidade com padrões não é uma medida de qualidade.
  9. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 45
  10. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 46 Nossos padrões assumem características no nível de Smalltalk/C++…
  11. NEM TODO PADRÃO É UNIVERSAL Erich Gamma, Richard Helm, Ralph

    Johnson, and John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4. 47 Se tivéssemos assumido linguagens procedurais, talvez tivéssemos incluído padrões como “Herança”, “Encapsulamento" e “Polimorfismo".
  12. 48

  13. 49

  14. 50 Estudo do livro “Padrões de Projeto”: 16 dos 23

    padrões têm implementações qualitativamente mais simples em Lisp ou Dylan do que em C++, ao menos para alguns usos de cada padrão.
  15. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 53 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  16. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 54 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural Funções são objetos Classes são objetos
  17. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 55 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  18. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 56 Common Lisp C Java

    Python Go Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ✔ ∗ Modelo de variáveis referência valor* valor e referência referência valor* e referência Checagem de tipos dinâmica estática estática dinâmica estática Expressão de tipos estrutural nominal nominal estrutural estrutural
  19. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 57 Common Lisp C Java

    Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural
  20. AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS 58 Common Lisp C Java

    Go Python Funções de 1ª classe ✔ ∗ ✔ ✔ ✔ Tipos de 1ª classe ✔ ✔ Iteradores ∗ ✔ ∗ ✔ Modelo de variáveis referência valor* valor e referência valor* e referência referência Checagem de tipos dinâmica estática estática estática dinâmica Expressão de tipos estrutural nominal nominal estrutural estrutural
  21. DOCTESTS: CONTEXTO E UMA ESTRATÉGIA CONCRETA 62 Instância de Estratégia

    (Promo) é passada ao construtor do Contexto (Order: o pedido)
  22. VARIAÇÕES DE STRATEGY EM PYTHON Implementação clássica usando ABC Implementação

    com funções de 1ª classe Implementação parametrizada com closure Implementação parametrizada com classe invocável 64
  23. STRATEGY CLÁSSICO: A CLASSE DO CONTEXT 65 Estratégia é passada

    para o construtor Estratégia é usada aqui
  24. QUAL É MAIS IDIOMÁTICA? Estratégia clássica parece muito verbosa em

    Python* Funções de 1ª classe são muito comuns na biblioteca padrão •Exemplo: argumento key nas funções embutidas sorted, max, min 82 * Sim, isto é subjetivo. Estamos falando de estilo!
  25. QUAL É MAIS IDIOMÁTICA COM PARÂMETROS? Use de closures é

    comum em Python •Python 3 ganhou a declaração nonlocal para suportar melhor essa prática Objetos invocáveis são característica típica de Python •Graham Dumpleton recomenda invocáveis para construir @decorators 83
  26. PORQUE APRENDER AS CARACTERÍSTICAS FUNDAMENTAIS Aprender novas linguagens mais rápido

    Aproveitar melhor as características de cada linguagem Escolher entre implementações alternativas Fazer bom uso de padrões de projeto Depurar problemas difíceis Emular características que fazem falta 85 Inspirado por Programming Language Pragmatics Michael L. Scott *