Te o r i a n a p r á t i c a
CADÊ O PARADIGMA?
Qual o paradigma da linguagem Go? Isso é uma boa pergunta?
Vamos ver um jeito melhor de entender linguagens a fundo.
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)
também em Polonês, Coreano…
3
4.7 stars na
Amazon.com
Slide 4
Slide 4 text
REVISÃO TÉCNICA DA TRADUÇÃO PT-BR DO GOPL
GOPL:
A Linguagem de
Programação Go
(Novatec, 2016)
Donovan &
Kernighan
4
Slide 5
Slide 5 text
TUTORIAL: INTRODUÇÃO A GO COM TDD
5
Apostila e código: http://bit.ly/tw-go-tdd
Slide 6
Slide 6 text
PARADIGMAS
Categorias de linguagens de programação
6
Slide 7
Slide 7 text
GOPL: ÁRVORE GENEALÓGICA DE GO
A Linguagem de
Programação Go
(Novatec, 2016)
Donovan &
Kernighan
7
Slide 8
Slide 8 text
8
Slide 9
Slide 9 text
LINGUAGEM DA CALCULADORA HP-25
9
Slide 10
Slide 10 text
UM LIVRO ESTILO “SURVEY” (LEVANTAMENTO)
Programming
Language
Pragmatics,
4th edition (2015)
Michael L. Scott
10
Slide 11
Slide 11 text
GCD ASM X86
Máximo divisor
comum em
assembly x86
(Scott, 2015)
11
Slide 12
Slide 12 text
GCD EM C, OCAML E PROLOG
12
Slide 13
Slide 13 text
UMA CLASSIFICAÇÃO
13
Programming
Language
Pragmatics,
4th edition (2015)
Michael L. Scott
Slide 14
Slide 14 text
UMA CLASSIFICAÇÃO (ZOOM)
14
Slide 15
Slide 15 text
UMA CLASSIFICAÇÃO (ZOOM)
15
???
Slide 16
Slide 16 text
OUTRO LIVRO
Princípios de Linguagens de
Programação
(2003)
Ana Cristina Vieira de Melo
Flávio Soares Corrêa da Silva
16
Slide 17
Slide 17 text
17
Slide 18
Slide 18 text
18
Lógicas
Slide 19
Slide 19 text
THE LANGUAGE LIST
19
Slide 20
Slide 20 text
CADÊ AS LINGUAGENS?
20
Slide 21
Slide 21 text
CATEGORIAS DE LINGUAGENS
21
Slide 22
Slide 22 text
CATEGORIAS DE LINGUAGENS (2)
22
Slide 23
Slide 23 text
CATEGORIAS DE LINGUAGENS (3)
23
Slide 24
Slide 24 text
CATEGORIAS DE LINGUAGENS (4)
24
Slide 25
Slide 25 text
CATEGORIAS?
“Ontology is overrated” — Clay Shirky
25
Slide 26
Slide 26 text
UMA CLASSIFICAÇÃO BASEADA EM FATOS!
26
Slide 27
Slide 27 text
UMA CLASSIFICAÇÃO BASEADA EM FATOS?
27
Gases nobres!?
Slide 28
Slide 28 text
ABORDAGEM MELHOR
Características de Linguagens de Programação
28
Slide 29
Slide 29 text
ENSINO DE TEORIA DE LINGUAGENS
29
Slide 30
Slide 30 text
O PAPER QUE EXPLICA A ABORDAGEM
30
Slide 31
Slide 31 text
TEORIA E PRÁTICA EM RACKET (DIALETO DE SCHEME)
31
Slide 32
Slide 32 text
TEORIA E PRÁTICA EM PASCAL
32
Slide 33
Slide 33 text
CARACTERÍSTICAS
Os mecanismos realmente importantes em linguagens de programação
33
Slide 34
Slide 34 text
Lisp
(CLOS)
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**
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
34
Slide 35
Slide 35 text
Lisp
(CLOS)
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**
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
35
Funções como objetos
“Classes” como objetos
Slide 36
Slide 36 text
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
36
Lisp
(CLOS)
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**
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
Slide 37
Slide 37 text
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
37
Lisp
(CLOS)
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**
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
Slide 38
Slide 38 text
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
38
Lisp
(CLOS)
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**
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
Slide 39
Slide 39 text
ALGUMAS CARACTERÍSTICAS X LINGUAGENS
39
Lisp
(CLOS)
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
Tipagem dinâmica estática estática dinâmica estática
Tipos estruturais nominais nominais estruturais estruturais
Slide 40
Slide 40 text
DESIGN PATTERNS
Padrões de Projeto
40
Slide 41
Slide 41 text
GOF: O LIVRO DA “GANGUE DOS 4”
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 ADOÇÃO DE PATTERNS
42
Slide 43
Slide 43 text
NEM TODOS OS PATTERNS SÃO UNIVERSAIS
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of
Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4.
43
Slide 44
Slide 44 text
NEM TODOS OS PATTERNS SÃO UNIVERSAIS
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of
Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4.
44
Slide 45
Slide 45 text
45
Slide 46
Slide 46 text
46
Slide 47
Slide 47 text
47
Slide 48
Slide 48 text
STRATEGY EM GO
Aproveitando as características de Go
48
Slide 49
Slide 49 text
SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO
49
Slide 50
Slide 50 text
50
Contexto Estratégia
Estratégias concretas
SELECIONAR UM ALGORITMO EM TEMPO DE EXECUÇÃO
Slide 51
Slide 51 text
STRATEGY EM GO
Implementação “clássica” usando interface
Implementação usando funções como objetos
51
CLIENTE E ITENS DE UM PEDIDO
54
interface/store.go
Slide 55
Slide 55 text
CONTEXTO E ESTRATÉGIA
55
interface/strategy.go
Slide 56
Slide 56 text
ESTRATÉGIA CONCRETA
56
interface/store.go
Slide 57
Slide 57 text
MAIS ESTRATÉGIAS CONCRETAS
57
interface/store.go
Slide 58
Slide 58 text
STRATEGY COM FUNÇÕES DE 1ª CLASSE
58
Slide 59
Slide 59 text
TESTES COM FUNÇÕES
59
Slide 60
Slide 60 text
ESTRATÉGIAS CONCRETAS COM FUNÇÕES
60
Slide 61
Slide 61 text
QUAL SOLUÇÃO É
MAIS IDIOMÁTICA?
Interfaces x funções
61
Slide 62
Slide 62 text
INTERFACE X FUNÇÕES DE 1ª CLASSE
Na biblioteca padrão, interfaces de um método são comuns.
62
Slide 63
Slide 63 text
INTERFACE X FUNÇÕES DE 1ª CLASSE
Mas o pacote http suporta os dois estilos de programação*:
63
*Kumar Iyer (ThoughtWorks): Higher-order functions vs interfaces in golang http://bit.ly/2j39uKh
Slide 64
Slide 64 text
CONCLUSÃO
Porque aprender os fundamentos
64
Slide 65
Slide 65 text
PORQUE APRENDER OS FUNDAMENTOS*
Aprender mais facilmente novas linguagens
Aproveitar melhor as características da linguagem
Saber escolher formas alternativas de implementação
Fazer bom uso de padrões de projeto
Depurar bugs complicados
Imitar características úteis em linguagens onde elas faltam
65
Inspirado por Programming
Language Pragmatics
Michael L. Scott
*
Slide 66
Slide 66 text
VAMOS APRENDER A TEORIA CODANDO?
Programming
Languages: An
Interpreter-based
Approach (1990)
Samuel Kamin
Dica da bibliografia
de Peter Norvig
66