51
Globalcode – Open4education Impactos no design utilizando programação funcional Luiz Costa [email protected] / @gutomcosta

TDC2016SP - Trilha Programação Funcional

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Trilha Programação Funcional

Globalcode–Open4education

Impactos no design utilizando programação funcional

Luiz [email protected] / @gutomcosta

Page 2: TDC2016SP - Trilha Programação Funcional

twitter.com/gutomcosta github.com/gutomcosta

www.sagadoprogamador.com.br medium.com/saga-do-programador

Page 3: TDC2016SP - Trilha Programação Funcional

orientação a objetos

Page 4: TDC2016SP - Trilha Programação Funcional

conjunto de ideias

encapsulamento polimorfismo

objetos herançaestado ...

Page 5: TDC2016SP - Trilha Programação Funcional

programação funcional

Page 6: TDC2016SP - Trilha Programação Funcional

conjunto de ideias

funções higher-order functions

imutabilidade lazy evaluationrecursão ...

Page 7: TDC2016SP - Trilha Programação Funcional

Dois estilos de escrita

Page 8: TDC2016SP - Trilha Programação Funcional

código imperativo

Foco no “como fazer”

Page 9: TDC2016SP - Trilha Programação Funcional

código declarativo

Foco no “o que fazer”

Page 10: TDC2016SP - Trilha Programação Funcional

código declarativo

Foco no “o que fazer”

Page 11: TDC2016SP - Trilha Programação Funcional

“When writing a modular program to solve a problem, one first divides the problem into subproblems, then solves the subproblems, and finally combines the solutions. The ways in which one can divide up the original problem depend directly on the ways in which one can glue solutions together.”

“Why functional programming matters” -John Hughes in Research topics in functional programming, 1990

Page 12: TDC2016SP - Trilha Programação Funcional

“When writing a modular program to solve a problem, one first divides the problem into subproblems, then solves the subproblems, and finally combines the solutions. The ways in which one can divide up the original problem depend directly on the ways in which one can glue solutions together.”

“Why functional programming matters” -John Hughes in Research topics in functional programming, 1990

Page 13: TDC2016SP - Trilha Programação Funcional

“When writing a modular program to solve a problem, one first divides the problem into subproblems, then solves the subproblems, and finally combines the solutions. The ways in which one can divide up the original problem depend directly on the ways in which one can glue solutions together.”

“Why functional programming matters” -John Hughes in Research topics in functional programming, 1990

Page 14: TDC2016SP - Trilha Programação Funcional

..argue in the remainder of this paper that functional languages provide two new, very important kinds of glue.

“Why functional programming matters” -John Hughes in Research topics in functional programming, 1990

higher order function lazy evaluation

Page 15: TDC2016SP - Trilha Programação Funcional

building blocks

Page 16: TDC2016SP - Trilha Programação Funcional

first class functions

uma variável?

Page 17: TDC2016SP - Trilha Programação Funcional

invocando uma função

função como parâmetro

Page 18: TDC2016SP - Trilha Programação Funcional

invoca a função

Page 19: TDC2016SP - Trilha Programação Funcional

mesma função variando comportamento

dados e funções separados

Page 20: TDC2016SP - Trilha Programação Funcional

higher order functionuma funcão que recebe outra função como

argumento ou retorna uma função

Page 21: TDC2016SP - Trilha Programação Funcional

Como First Class Functions e Higher

Order Functions podem impactar nas decisões

de design?

Page 22: TDC2016SP - Trilha Programação Funcional

OO foco na estruturaComo substituir uma implementação em

runtime?

Page 23: TDC2016SP - Trilha Programação Funcional

FP foco na transformaçãotransformação?

Page 24: TDC2016SP - Trilha Programação Funcional

listas, map, reduce, filter

Page 25: TDC2016SP - Trilha Programação Funcional

map

capitalize capitalize capitalize

Jose Paulo Luiz

jose luizpaulo

TextTextTextText

clojure.string

Page 26: TDC2016SP - Trilha Programação Funcional

focus on results, not steps

“Functional Thinking” -Neal Ford - IBM Developer Works series

Page 27: TDC2016SP - Trilha Programação Funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Page 28: TDC2016SP - Trilha Programação Funcional

ArgentumAnálise de Candlesticks, bolsa de valores

Page 29: TDC2016SP - Trilha Programação Funcional

Candlesticks

Page 30: TDC2016SP - Trilha Programação Funcional

ArgentumDomain Model

Page 31: TDC2016SP - Trilha Programação Funcional

como representar os conceitos?

Negócio, Candlestick

Page 32: TDC2016SP - Trilha Programação Funcional
Page 33: TDC2016SP - Trilha Programação Funcional

define uma abstração

Page 34: TDC2016SP - Trilha Programação Funcional

dados e funções separados

Page 35: TDC2016SP - Trilha Programação Funcional

decompose an algorithm into functions that are simple, meaningful and useful.

“Tutorial on Good Lisp Programming Style” -Peter Norvig in 1992

Page 36: TDC2016SP - Trilha Programação Funcional

decompose an algorithm into functions that are simple, meaningful and useful.

“Tutorial on Good Lisp Programming Style” -Peter Norvig in 1992

Page 37: TDC2016SP - Trilha Programação Funcional

decomposição

invariantes

Page 38: TDC2016SP - Trilha Programação Funcional

decomposição

dependência de outro namespace

Page 39: TDC2016SP - Trilha Programação Funcional

ArgentumGeração de gráfico com indicadores define uma

abstração

define comportamentos diferentes

Page 40: TDC2016SP - Trilha Programação Funcional

como variar o comportamento?

Page 41: TDC2016SP - Trilha Programação Funcional

declara as funções

Page 42: TDC2016SP - Trilha Programação Funcional

compondo funções

higher order functions

decomposição de função

Page 43: TDC2016SP - Trilha Programação Funcional

calculando a média móvel

Page 44: TDC2016SP - Trilha Programação Funcional

com diferentes building blocks, é

preciso repensar as decisões de design

Page 45: TDC2016SP - Trilha Programação Funcional

OO e FP Juntos?

Page 46: TDC2016SP - Trilha Programação Funcional

Functional in the small, OO in the large.“Tell Above, and Ask Below - Hybridizing OO and Functional design”

-Michael Feathers, blog post

Page 47: TDC2016SP - Trilha Programação Funcional

Functional Core, imperative shell.“Destroy all software - episode 72”

-Gary Bernhardt, destroy on software screen cast series

Page 48: TDC2016SP - Trilha Programação Funcional

conclusão

Page 49: TDC2016SP - Trilha Programação Funcional

Functional Programming is more a mindset than a particular set

of tools or languages.“Functional Thinking”

-Neal Ford - IBM Developer Works series

Page 50: TDC2016SP - Trilha Programação Funcional

Obrigado

Page 51: TDC2016SP - Trilha Programação Funcional

ReferênciasSICP - http://mitpress.mit.edu/sicp/full-text/book/book.html

Why functional programming matters - http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

Clojure - http://clojure.org/

Functional Thinking - http://www.ibm.com/developerworks/java/library/j-ft1/index.html

Tell Above, and ask Below - http://michaelfeathers.typepad.com/michael_feathers_blog/2012/03/tell-above-and-ask-below-hybridizing-oo-and-functional-design.html

Functional Core, imperative shell - https://www.destroyallsoftware.com/screencasts/catalog/functional-core-imperative-shell

Tutorial on good lisp programming style - http://www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf