Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2 Sometimes you need a blank template.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

PARADIGMAS Categorias de linguagens de programação 4

Slide 5

Slide 5 text

O PRIMEIRO “PARADIGMA" QUE APRENDI: IMPERATIVO 5 HP-25 TI 58C

Slide 6

Slide 6 text

PROGRAMA PARA CALCULADORA HP-25 6

Slide 7

Slide 7 text

PANORAMA SOBRE LINGUAGENS DE PROGRAMAÇÃO Programming Language Pragmatics,
 4th edition (2015) Michael L. Scott 7

Slide 8

Slide 8 text

MDC: ASM X86 Máximo divisor comum em Assembly x86 (Scott, 2015) 8

Slide 9

Slide 9 text

MDC EM C, OCAML, PROLOG 9

Slide 10

Slide 10 text

MDC EM PYTHON Estilo imperativo Estilo funcional 10

Slide 11

Slide 11 text

MDC EM PYTHON 11 Inadequado para Python que não faz otimização de chamada de cauda (TCO) Estilo imperativo Estilo funcional

Slide 12

Slide 12 text

UMA CLASSIFICAÇÃO 12 Programming Language Pragmatics,
 4th edition (2015) Michael L. Scott

Slide 13

Slide 13 text

UMA CLASSIFICAÇÃO (ZOOM) 13

Slide 14

Slide 14 text

UMA CLASSIFICAÇÃO (ZOOM) 14 ???

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17 Lógicas

Slide 18

Slide 18 text

SITE: THE LANGUAGE LIST 18

Slide 19

Slide 19 text

SITE QUEBRADO, LINGUAGENS FALTANDO… 19

Slide 20

Slide 20 text

CATEGORIAS DE LINGUAGENS 20

Slide 21

Slide 21 text

CATEGORIAS DE LINGUAGENS (2) 21

Slide 22

Slide 22 text

CATEGORIAS DE LINGUAGENS (3) 22

Slide 23

Slide 23 text

CATEGORIAS DE LINGUAGENS (4) 23

Slide 24

Slide 24 text

CATEGORIAS? Ontologia é tão anos 90… 24

Slide 25

Slide 25 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS 25

Slide 26

Slide 26 text

UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS? 26 "Gases" “nobres"!?

Slide 27

Slide 27 text

“Ontology is overrated.” Clay Shirky 27 Ontologias são sobrevalorizadas. Pesquise o artigo em inglês!

Slide 28

Slide 28 text

UMA ABORDAGEM MELHOR Fundamental Features of Programming Languages 28

Slide 29

Slide 29 text

ENSINO MODERNO DE TEORIA DE LINGUAGENS 29 Ensinando linguagens de programação na era
 pós-Lineu

Slide 30

Slide 30 text

ARTIGO APRESENTANDO A ABORDAGEM 30

Slide 31

Slide 31 text

ARTIGO APRESENTANDO A ABORDAGEM 31 “Paradigmas" de linguagens de programação são um legado moribundo e tedioso…

Slide 32

Slide 32 text

ARTIGO APRESENTANDO A ABORDAGEM 32

Slide 33

Slide 33 text

ARTIGO APRESENTANDO A ABORDAGEM 33 Criadores de linguagens modernas não têm o menor respeito por eles…

Slide 34

Slide 34 text

ARTIGO APRESENTANDO A ABORDAGEM 34

Slide 35

Slide 35 text

ARTIGO APRESENTANDO A ABORDAGEM 35 …devemos abandonar esse método no ensino de linguagens…

Slide 36

Slide 36 text

ARTIGO APRESENTANDO A ABORDAGEM 36

Slide 37

Slide 37 text

ARTIGO APRESENTANDO A ABORDAGEM 37 …um livro-texto que explora esses assuntos.

Slide 38

Slide 38 text

TEORIA NA PRÁTICA COM RACKET (DIALETOS DE SCHEME) 38

Slide 39

Slide 39 text

TEORIA NA PRÁTICA COM PASCAL (1990) 39

Slide 40

Slide 40 text

PADRÕES DE PROJETO Quando as linguagens deixam a desejar 40

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

PROBLEMAS NA DIFUSÃO DOS PADRÕES 42 Ralph Johnson no IME/USP (2014?)

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

PROBLEMAS NA DIFUSÃO DOS PADRÕES 44 Ralph Johnson no IME/USP (2014?) Conformidade com padrões não é uma medida de qualidade.

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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++…

Slide 47

Slide 47 text

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".

Slide 48

Slide 48 text

48

Slide 49

Slide 49 text

49

Slide 50

Slide 50 text

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.

Slide 51

Slide 51 text

51 16 dos 23 padrões são invisíveis ou mais simples, devido a essas características

Slide 52

Slide 52 text

CARACTERÍSTICAS Características essenciais, não apenas açúcar sintático. 52

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

STRATEGY EM PYTHON Aproveitando características de Python 59

Slide 60

Slide 60 text

SELEÇÃO DE UM ALGORITMO EM TEMPO DE EXECUÇÃO 60

Slide 61

Slide 61 text

61 Contexto Estratégia Estratégias concretas SELEÇÃO DE UM ALGORITMO EM TEMPO DE EXECUÇÃO

Slide 62

Slide 62 text

DOCTESTS: CONTEXTO E UMA ESTRATÉGIA CONCRETA 62 Instância de Estratégia (Promo) é passada ao construtor do Contexto (Order: o pedido)

Slide 63

Slide 63 text

DOCTESTS: MAIS DUAS ESTRATÉGIAS CONCRETAS 63

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

STRATEGY CLÁSSICO: A CLASSE DO CONTEXT 65 Estratégia é passada para o construtor Estratégia é usada aqui

Slide 66

Slide 66 text

STRATEGY: CLASSE ABSTRATA E SUBCLASSE CONCRETA 66

Slide 67

Slide 67 text

MAIS DUAS ESTRATÉGIAS CONCRETAS 67

Slide 68

Slide 68 text

STRATEGY COM FUNÇÃO DE 1A CLASSE 68

Slide 69

Slide 69 text

CONTEXTO: FUNÇÃO DE ESTRATÉGIA COMO ARGUMENTO 69 Função de estratégia é passada ao construtor de Order

Slide 70

Slide 70 text

CONTEXTO: USO DA FUNÇÃO DE ESTRATÉGIA 70

Slide 71

Slide 71 text

ESTRATÉGIAS CONCRETAS COMO FUNÇÕES 71

Slide 72

Slide 72 text

ESTRATÉGIAS CONCRETAS COMO FUNÇÕES (2) 72

Slide 73

Slide 73 text

ESTRATÉGIA PARAMETRIZADA
 COM CLOSURE 73

Slide 74

Slide 74 text

ESTRATÉGIA PARAMETRIZADA COM CLOSURE 74 função promo é invocada com porcentagem de desconto

Slide 75

Slide 75 text

IMPLEMENTAÇÃO COM CLOSURE 75 Função externa recebe argumento ‘percent' Função interna leva associação de `percent` em sua closure

Slide 76

Slide 76 text

LAMBDA: ATALHO PARA DEFINIR A FUNÇÃO INTERNA 76

Slide 77

Slide 77 text

ESTRATÉGIA PARAMETRIZADA COM INVOCÁVEL 77

Slide 78

Slide 78 text

ESTRATÉGIA PARAMETRIZADA COM INVOCÁVEL 78 objeto promo é instanciado com porcentagem de desconto

Slide 79

Slide 79 text

CLASSE IMPLEMENTADA COMO INVOCÁVEL 79

Slide 80

Slide 80 text

SUB-CLASSES IMPLEMENTADAS COMO INVOCÁVEIS 80

Slide 81

Slide 81 text

QUAL A SOLUÇÃO MAIS IDIOMÁTICA? Classes x funções 81

Slide 82

Slide 82 text

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!

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

CONCLUINDO Aprenda as características fundamentais 84

Slide 85

Slide 85 text

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 *

Slide 86

Slide 86 text

Luciano Ramalho luciano.ramalho@thoughtworks.com
 Twitter: @ramalhoorg Github: github.com/standupdev/paradigm-free Slides: speakerdeck.com/ramalho MUITO GRATO!