Académique Documents
Professionnel Documents
Culture Documents
Luciano Ramalho
@ramalhoorg
Sometimes you need a blank template.
2
FLUENT PYTHON, MEU 1º LIVRO
3
PARADIGMAS
Categorias de linguagens de programação
4
O PRIMEIRO “PARADIGMA" QUE APRENDI: IMPERATIVO
HP-25 TI 58C
5
PROGRAMA PARA CALCULADORA HP-25
6
PANORAMA SOBRE LINGUAGENS DE PROGRAMAÇÃO
Programming
Language
Pragmatics,
4th edition (2015)
Michael L. Scott
7
MDC: ASM X86
Máximo divisor
comum em
Assembly x86
(Scott, 2015)
8
MDC EM C, OCAML, PROLOG
9
MDC EM PYTHON
10
MDC EM PYTHON Inadequado para
Python que não faz
otimização de
chamada de cauda
(TCO)
11
UMA CLASSIFICAÇÃO
Programming
Language
Pragmatics,
4th edition (2015)
Michael L. Scott
12
UMA CLASSIFICAÇÃO (ZOOM)
13
UMA CLASSIFICAÇÃO (ZOOM)
???
14
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
16
Lógicas
17
SITE: THE LANGUAGE LIST
18
SITE QUEBRADO, LINGUAGENS FALTANDO…
19
CATEGORIAS DE LINGUAGENS
20
CATEGORIAS DE LINGUAGENS (2)
21
CATEGORIAS DE LINGUAGENS (3)
22
CATEGORIAS DE LINGUAGENS (4)
23
CATEGORIAS?
Ontologia é tão anos 90…
24
UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS
25
UMA CLASSIFICAÇÃO BASEADA EM FATOS CIENTÍFICOS?
"Gases" “nobres"!?
26
“Ontology is overrated.”
Clay Shirky
28
ENSINO MODERNO DE TEORIA DE LINGUAGENS
Ensinando linguagens de
programação na era
pós-Lineu
29
ARTIGO APRESENTANDO A ABORDAGEM
30
ARTIGO APRESENTANDO A ABORDAGEM
32
ARTIGO APRESENTANDO A ABORDAGEM
34
ARTIGO APRESENTANDO A ABORDAGEM
35
ARTIGO APRESENTANDO A ABORDAGEM
36
ARTIGO APRESENTANDO A ABORDAGEM
38
TEORIA NA PRÁTICA COM PASCAL (1990)
39
PADRÕES DE PROJETO
Quando as linguagens deixam a desejar
40
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
PROBLEMAS NA DIFUSÃO DOS PADRÕES
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns: Elements of
Reusable Object-Oriented Software (Addison-Wesley, 1995), p. 4.
45
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
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
48
49
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.
50
16 dos 23 padrões são invisíveis ou mais
simples, devido a essas características51
CARACTERÍSTICAS
Características essenciais, não apenas açúcar sintático.
52
AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS
Common
C Java Python Go
Lisp
Funções de 1ª classe ✔ ∗ ✔ ✔ ✔
Tipos de 1ª classe ✔ ✔
Iteradores ∗ ✔ ✔ ∗
valor e valor* e
Modelo de variáveis referência valor*
referência
referência
referência
Common
C Java Python Go
Lisp
Funções
Funções de
são 1ª classe
objetos ✔ ∗ ✔ ✔ ✔
Tipos são
Classes de 1ª classe
objetos ✔ ✔
Iteradores ∗ ✔ ✔ ∗
valor e valor* e
Modelo de variáveis referência valor*
referência
referência
referência
Common
C Java Python Go
Lisp
Funções de 1ª classe ✔ ∗ ✔ ✔ ✔
Tipos de 1ª classe ✔ ✔
Iteradores ∗ ✔ ✔ ∗
valor e valor* e
Modelo de variáveis referência valor*
referência
referência
referência
Common
C Java Python Go
Lisp
Funções de 1ª classe ✔ ∗ ✔ ✔ ✔
Tipos de 1ª classe ✔ ✔
Iteradores ∗ ✔ ✔ ∗
valor e valor* e
Modelo de variáveis referência valor*
referência
referência
referência
Common
C Java Go Python
Lisp
Funções de 1ª classe ✔ ∗ ✔ ✔ ✔
Tipos de 1ª classe ✔ ✔
Iteradores ∗ ✔ ∗ ✔
valor e valor* e
Modelo de variáveis referência valor*
referência referência
referência
Common
C Java Go Python
Lisp
Funções de 1ª classe ✔ ∗ ✔ ✔ ✔
Tipos de 1ª classe ✔ ✔
Iteradores ∗ ✔ ∗ ✔
valor e valor* e
Modelo de variáveis referência valor*
referência referência
referência
59
SELEÇÃO DE UM ALGORITMO EM TEMPO DE EXECUÇÃO
60
SELEÇÃO DE UM ALGORITMO EM TEMPO DE EXECUÇÃO
Contexto Estratégia
Estratégias concretas
61
DOCTESTS: CONTEXTO E UMA ESTRATÉGIA CONCRETA
Instância de Estratégia
(Promo) é passada ao
construtor do
Contexto (Order: o
pedido)
62
DOCTESTS: MAIS DUAS ESTRATÉGIAS CONCRETAS
63
VARIAÇÕES DE STRATEGY EM PYTHON
64
STRATEGY CLÁSSICO: A CLASSE DO CONTEXT
Estratégia é passada
para o construtor
65
STRATEGY: CLASSE ABSTRATA E SUBCLASSE CONCRETA
66
MAIS DUAS ESTRATÉGIAS CONCRETAS
67
STRATEGY COM
FUNÇÃO DE 1 CLASSE
A
68
CONTEXTO: FUNÇÃO DE ESTRATÉGIA COMO ARGUMENTO
Função de estratégia é
passada ao construtor
de Order
69
CONTEXTO: USO DA FUNÇÃO DE ESTRATÉGIA
70
ESTRATÉGIAS CONCRETAS COMO FUNÇÕES
71
ESTRATÉGIAS CONCRETAS COMO FUNÇÕES (2)
72
ESTRATÉGIA
PARAMETRIZADA
COM CLOSURE
73
ESTRATÉGIA PARAMETRIZADA COM CLOSURE
função promo é
invocada com
porcentagem de
desconto
74
IMPLEMENTAÇÃO COM CLOSURE
75
LAMBDA: ATALHO PARA DEFINIR A FUNÇÃO INTERNA
76
ESTRATÉGIA
PARAMETRIZADA
COM INVOCÁVEL
77
ESTRATÉGIA PARAMETRIZADA COM INVOCÁVEL
objeto promo é
instanciado com
porcentagem de
desconto
78
CLASSE IMPLEMENTADA COMO INVOCÁVEL
79
SUB-CLASSES IMPLEMENTADAS COMO INVOCÁVEIS
80
QUAL A SOLUÇÃO
MAIS IDIOMÁTICA?
Classes x funções
81
QUAL É MAIS IDIOMÁTICA?
83
CONCLUINDO
Aprenda as características fundamentais
84
PORQUE APRENDER AS CARACTERÍSTICAS FUNDAMENTAIS
Twitter: @ramalhoorg
Github: github.com/standupdev/paradigm-free
Slides: speakerdeck.com/ramalho