tdc2016sp - trilha programação funcional
TRANSCRIPT
![Page 1: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/1.jpg)
Globalcode–Open4education
Impactos no design utilizando programação funcional
Luiz [email protected] / @gutomcosta
![Page 2: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/2.jpg)
twitter.com/gutomcosta github.com/gutomcosta
www.sagadoprogamador.com.br medium.com/saga-do-programador
![Page 3: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/3.jpg)
orientação a objetos
![Page 4: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/4.jpg)
conjunto de ideias
encapsulamento polimorfismo
objetos herançaestado ...
![Page 5: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/5.jpg)
programação funcional
![Page 6: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/6.jpg)
conjunto de ideias
funções higher-order functions
imutabilidade lazy evaluationrecursão ...
![Page 7: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/7.jpg)
Dois estilos de escrita
![Page 8: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/8.jpg)
código imperativo
Foco no “como fazer”
![Page 9: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/9.jpg)
código declarativo
Foco no “o que fazer”
![Page 10: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/10.jpg)
código declarativo
Foco no “o que fazer”
![Page 11: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/11.jpg)
“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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/12.jpg)
“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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/13.jpg)
“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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/14.jpg)
..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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/15.jpg)
building blocks
![Page 16: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/16.jpg)
first class functions
uma variável?
![Page 17: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/17.jpg)
invocando uma função
função como parâmetro
![Page 18: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/18.jpg)
invoca a função
![Page 19: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/19.jpg)
mesma função variando comportamento
dados e funções separados
![Page 20: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/20.jpg)
higher order functionuma funcão que recebe outra função como
argumento ou retorna uma função
![Page 21: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/21.jpg)
Como First Class Functions e Higher
Order Functions podem impactar nas decisões
de design?
![Page 22: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/22.jpg)
OO foco na estruturaComo substituir uma implementação em
runtime?
![Page 23: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/23.jpg)
FP foco na transformaçãotransformação?
![Page 24: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/24.jpg)
listas, map, reduce, filter
![Page 25: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/25.jpg)
map
capitalize capitalize capitalize
Jose Paulo Luiz
jose luizpaulo
TextTextTextText
clojure.string
![Page 26: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/26.jpg)
focus on results, not steps
“Functional Thinking” -Neal Ford - IBM Developer Works series
![Page 27: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/27.jpg)
Filter clojure.string
1 2 3 4 5 6 7 8 9
![Page 28: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/28.jpg)
ArgentumAnálise de Candlesticks, bolsa de valores
![Page 29: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/29.jpg)
Candlesticks
![Page 30: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/30.jpg)
ArgentumDomain Model
![Page 31: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/31.jpg)
como representar os conceitos?
Negócio, Candlestick
![Page 32: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/32.jpg)
![Page 33: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/33.jpg)
define uma abstração
![Page 34: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/34.jpg)
dados e funções separados
![Page 35: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/37.jpg)
decomposição
invariantes
![Page 38: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/38.jpg)
decomposição
dependência de outro namespace
![Page 39: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/39.jpg)
ArgentumGeração de gráfico com indicadores define uma
abstração
define comportamentos diferentes
![Page 40: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/40.jpg)
como variar o comportamento?
![Page 41: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/41.jpg)
declara as funções
![Page 42: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/42.jpg)
compondo funções
higher order functions
decomposição de função
![Page 43: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/43.jpg)
calculando a média móvel
![Page 44: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/44.jpg)
com diferentes building blocks, é
preciso repensar as decisões de design
![Page 45: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/45.jpg)
OO e FP Juntos?
![Page 46: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/47.jpg)
Functional Core, imperative shell.“Destroy all software - episode 72”
-Gary Bernhardt, destroy on software screen cast series
![Page 48: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/48.jpg)
conclusão
![Page 49: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/50.jpg)
Obrigado
![Page 51: TDC2016SP - Trilha Programação Funcional](https://reader031.vdocuments.site/reader031/viewer/2022021506/58a465951a28abb8288b5f65/html5/thumbnails/51.jpg)
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