Vous êtes sur la page 1sur 86

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
Sometimes you need a blank template.

2
FLUENT PYTHON, MEU 1º LIVRO

4.7 stars at



Amazon.com

Fluent Python (O’Reilly, 2015)


Python Fluente (Novatec, 2015)
Python к вершинам

мастерства (DMK, 2015)
流暢的 Python (Gotop, 2016)
also in Polish, Korean, etc…

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

Estilo imperativo Estilo funcional

10
MDC EM PYTHON Inadequado para
Python que não faz
otimização de
chamada de cauda
(TCO)

Estilo imperativo Estilo funcional

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

Ontologias são sobrevalorizadas.


Pesquise o artigo em inglês!
27
UMA ABORDAGEM
MELHOR
Fundamental Features of Programming Languages

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

“Paradigmas" de linguagens de programação


são um legado moribundo e tedioso…
31
ARTIGO APRESENTANDO A ABORDAGEM

32
ARTIGO APRESENTANDO A ABORDAGEM

Criadores de linguagens modernas


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

34
ARTIGO APRESENTANDO A ABORDAGEM

…devemos abandonar esse método no ensino de linguagens…

35
ARTIGO APRESENTANDO A ABORDAGEM

36
ARTIGO APRESENTANDO A ABORDAGEM

…um livro-texto que explora esses assuntos.


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

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

Ralph Johnson no IME/USP (2014?) 42


PROBLEMAS NA DIFUSÃO DOS PADRÕES

Excesso de ênfase nos padrões como resultados


finais em vez de passos no processo de design

Ralph Johnson no IME/USP (2014?) 43


PROBLEMAS NA DIFUSÃO DOS PADRÕES

Conformidade com padrões não é uma medida de


qualidade.

Ralph Johnson no IME/USP (2014?) 44


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
NEM TODO PADRÃO É UNIVERSAL

Nossos padrões assumem características no nível


de Smalltalk/C++…

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

Se tivéssemos assumido linguagens procedurais,


talvez tivéssemos incluído padrões como
“Herança”, “Encapsulamento" e “Polimorfismo".

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

Checagem de tipos dinâmica estática estática dinâmica estática

Expressão de tipos estrutural nominal nominal estrutural estrutural


53
AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS

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

Checagem de tipos dinâmica estática estática dinâmica estática

Expressão de tipos estrutural nominal nominal estrutural estrutural


54
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

Checagem de tipos dinâmica estática estática dinâmica estática

Expressão de tipos estrutural nominal nominal estrutural estrutural


55
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

Checagem de tipos dinâmica estática estática dinâmica estática

Expressão de tipos estrutural nominal nominal estrutural estrutural


56
AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS

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

Checagem de tipos dinâmica estática estática estática dinâmica

Expressão de tipos estrutural nominal nominal estrutural estrutural


57
AMOSTRA DE CARACTERÍSTICAS ✖ LINGUAGENS

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

Checagem de tipos dinâmica estática estática estática dinâmica

Expressão de tipos estrutural nominal nominal estrutural estrutural


58
STRATEGY
EM PYTHON
Aproveitando características de Python

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

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
STRATEGY CLÁSSICO: A CLASSE DO CONTEXT

Estratégia é passada
para o construtor

Estratégia é usada aqui

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

Função externa recebe


argumento ‘percent'

Função interna leva


associação de `percent`
em sua 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?

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

* Sim, isto é subjetivo. Estamos falando de estilo!


82
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
CONCLUINDO
Aprenda as características fundamentais

84
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

* Inspirado por Programming


Language Pragmatics
Michael L. Scott
85
MUITO GRATO!
Luciano Ramalho
luciano.ramalho@thoughtworks.com


Twitter: @ramalhoorg
Github: github.com/standupdev/paradigm-free
Slides: speakerdeck.com/ramalho

Vous aimerez peut-être aussi