impactos no design com programação funcional

115
impactos no design com programação funcional Luiz Costa @gutomcosta www.sagadoprogramador.com.br Sunday, October 20, 13

Upload: luiz-costa

Post on 26-May-2015

787 views

Category:

Technology


1 download

DESCRIPTION

Orientação a Objetos é sem dúvidas o paradigma de programação mais utilizado, mas ultimamente temos visto um crescimento significativo no uso de linguagens funcionais. O objetivo desta palestra é mostrar uma abordagem de design que mostra problemas comuns que temos em orientação a objetos dentro do mundo funcional. Para isso, vamos utilizar um sistema que simula algumas operações de bolsa de valores para mostrar como as decisões tomadas em design OO podem ser mapeadas no mundo funcional através da linguagem Clojure.

TRANSCRIPT

Page 1: Impactos no design com programação funcional

impactos no design com programação

funcionalLuiz Costa

@gutomcostawww.sagadoprogramador.com.br

Sunday, October 20, 13

Page 2: Impactos no design com programação funcional

Sunday, October 20, 13

Page 3: Impactos no design com programação funcional

Programação Funcional?

Sunday, October 20, 13

Page 4: Impactos no design com programação funcional

Programação Funcional?

Sunday, October 20, 13

Page 5: Impactos no design com programação funcional

Programação Funcional?

Sunday, October 20, 13

Page 6: Impactos no design com programação funcional

Programação Funcional?

Sunday, October 20, 13

Page 7: Impactos no design com programação funcional

Programação Funcional?

Sunday, October 20, 13

Page 8: Impactos no design com programação funcional

Programação Funcional?

e alguns novatosSunday, October 20, 13

Page 9: Impactos no design com programação funcional

orientação a objetos

Sunday, October 20, 13

Page 10: Impactos no design com programação funcional

Sunday, October 20, 13

Page 11: Impactos no design com programação funcional

conjunto de ideias

Sunday, October 20, 13

Page 12: Impactos no design com programação funcional

conjunto de ideias

encapsulamento polimorfismo

objetos herançaestado ...

Sunday, October 20, 13

Page 13: Impactos no design com programação funcional

programação funcional

Sunday, October 20, 13

Page 14: Impactos no design com programação funcional

Sunday, October 20, 13

Page 15: Impactos no design com programação funcional

conjunto de ideias

Sunday, October 20, 13

Page 16: Impactos no design com programação funcional

conjunto de ideias

funções higher-order functions

imutabilidade lazy evaluationrecursão ...

Sunday, October 20, 13

Page 17: Impactos no design com programação funcional

código imperativo

Sunday, October 20, 13

Page 18: Impactos no design com programação funcional

código imperativo

Sunday, October 20, 13

Page 19: Impactos no design com programação funcional

código imperativo

Sunday, October 20, 13

Page 20: Impactos no design com programação funcional

código imperativo

Sunday, October 20, 13

Page 21: Impactos no design com programação funcional

código imperativo

Foco no “como fazer”

Sunday, October 20, 13

Page 22: Impactos no design com programação funcional

código declarativo

Sunday, October 20, 13

Page 23: Impactos no design com programação funcional

código declarativo

Foco no “o que fazer”

Sunday, October 20, 13

Page 24: Impactos no design com programação funcional

código declarativo

Sunday, October 20, 13

Page 25: Impactos no design com programação funcional

código declarativo

Foco no “o que fazer”

Sunday, October 20, 13

Page 26: Impactos no design com 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

Sunday, October 20, 13

Page 27: Impactos no design com 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

Sunday, October 20, 13

Page 28: Impactos no design com 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

Sunday, October 20, 13

Page 29: Impactos no design com 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

Sunday, October 20, 13

Page 30: Impactos no design com programação funcional

building blocks

Sunday, October 20, 13

Page 31: Impactos no design com programação funcional

Sunday, October 20, 13

Page 32: Impactos no design com programação funcional

uma variável?

Sunday, October 20, 13

Page 33: Impactos no design com programação funcional

first class functions

uma variável?

Sunday, October 20, 13

Page 34: Impactos no design com programação funcional

Sunday, October 20, 13

Page 35: Impactos no design com programação funcional

invocando uma função

função como parâmetro

Sunday, October 20, 13

Page 36: Impactos no design com programação funcional

invoca a funçãoSunday, October 20, 13

Page 37: Impactos no design com programação funcional

Sunday, October 20, 13

Page 38: Impactos no design com programação funcional

dados e funções separados

Sunday, October 20, 13

Page 39: Impactos no design com programação funcional

mesma função variando comportamento

dados e funções separados

Sunday, October 20, 13

Page 40: Impactos no design com programação funcional

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

argumento ou retorna uma função

Sunday, October 20, 13

Page 41: Impactos no design com programação funcional

functional style

Sunday, October 20, 13

Page 42: Impactos no design com programação funcional

OO foco na estruturaComo substituir uma implementação em

runtime?

Sunday, October 20, 13

Page 43: Impactos no design com programação funcional

FP foco na transformaçãotransformação?

Sunday, October 20, 13

Page 44: Impactos no design com programação funcional

listas, map, reduce, filter

Sunday, October 20, 13

Page 45: Impactos no design com programação funcional

map

TextTextTextText

Sunday, October 20, 13

Page 46: Impactos no design com programação funcional

map

TextTextTextText

clojure.string

Sunday, October 20, 13

Page 47: Impactos no design com programação funcional

map

jose luizpaulo

TextTextTextText

clojure.string

Sunday, October 20, 13

Page 48: Impactos no design com programação funcional

map

capitalize

Jose

jose luizpaulo

TextTextTextText

clojure.string

Sunday, October 20, 13

Page 49: Impactos no design com programação funcional

map

capitalize capitalize

Jose Paulo

jose luizpaulo

TextTextTextText

clojure.string

Sunday, October 20, 13

Page 50: Impactos no design com programação funcional

map

capitalize capitalize capitalize

Jose Paulo Luiz

jose luizpaulo

TextTextTextText

clojure.string

Sunday, October 20, 13

Page 51: Impactos no design com programação funcional

focus on results, not steps

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

Sunday, October 20, 13

Page 52: Impactos no design com programação funcional

Filter clojure.string

Sunday, October 20, 13

Page 53: Impactos no design com programação funcional

Filter clojure.string

Sunday, October 20, 13

Page 54: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 55: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 56: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 57: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 58: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 59: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 60: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 61: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 62: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 63: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 64: Impactos no design com programação funcional

Filter clojure.string

1 2 3 4 5 6 7 8 9

Sunday, October 20, 13

Page 65: Impactos no design com programação funcional

Reduce

10 20 30 400

Sunday, October 20, 13

Page 66: Impactos no design com programação funcional

Reduce

10 20 30 400

função

Sunday, October 20, 13

Page 67: Impactos no design com programação funcional

Reduce

100

função

Sunday, October 20, 13

Page 68: Impactos no design com programação funcional

ArgentumAnálise de Candlesticks, bolsa de valores

Sunday, October 20, 13

Page 69: Impactos no design com programação funcional

Candlesticks

Sunday, October 20, 13

Page 70: Impactos no design com programação funcional

ArgentumDomain Model

Sunday, October 20, 13

Page 71: Impactos no design com programação funcional

antes, um pouco de clojure

muito pouco mesmo ...

Sunday, October 20, 13

Page 72: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 73: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 74: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 75: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 76: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 77: Impactos no design com programação funcional

Clojure

Sunday, October 20, 13

Page 78: Impactos no design com programação funcional

como representar os conceitos?

Negócio, Candlestick

Sunday, October 20, 13

Page 79: Impactos no design com programação funcional

Sunday, October 20, 13

Page 80: Impactos no design com programação funcional

Sunday, October 20, 13

Page 81: Impactos no design com programação funcional

Sunday, October 20, 13

Page 82: Impactos no design com programação funcional

define uma abstração

Sunday, October 20, 13

Page 83: Impactos no design com programação funcional

Sunday, October 20, 13

Page 84: Impactos no design com programação funcional

dados e funções separadosSunday, October 20, 13

Page 85: Impactos no design com programação funcional

dados e funções separadosSunday, October 20, 13

Page 86: Impactos no design com programação funcional

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

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

Sunday, October 20, 13

Page 87: Impactos no design com programação funcional

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

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

Sunday, October 20, 13

Page 88: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 89: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 90: Impactos no design com programação funcional

decomposição

invariantes

Sunday, October 20, 13

Page 91: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 92: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 93: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 94: Impactos no design com programação funcional

decomposiçãoSunday, October 20, 13

Page 95: Impactos no design com programação funcional

decomposição

dependência de outro namespace

Sunday, October 20, 13

Page 96: Impactos no design com programação funcional

ArgentumGeração de gráfico com indicadores

Sunday, October 20, 13

Page 97: Impactos no design com programação funcional

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

abstração

Sunday, October 20, 13

Page 98: Impactos no design com programação funcional

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

abstração

define comportamentos diferentesSunday, October 20, 13

Page 99: Impactos no design com programação funcional

como variar o comportamento?

Sunday, October 20, 13

Page 100: Impactos no design com programação funcional

declara as funçõesSunday, October 20, 13

Page 101: Impactos no design com programação funcional

compondo funçõesSunday, October 20, 13

Page 102: Impactos no design com programação funcional

compondo funções

decomposição de função

Sunday, October 20, 13

Page 103: Impactos no design com programação funcional

compondo funções

higher order functions

Sunday, October 20, 13

Page 104: Impactos no design com programação funcional

calculando a média móvelSunday, October 20, 13

Page 105: Impactos no design com programação funcional

calculando a média móvelSunday, October 20, 13

Page 106: Impactos no design com programação funcional

calculando a média móvelSunday, October 20, 13

Page 107: Impactos no design com programação funcional

calculando a média móvelSunday, October 20, 13

Page 108: Impactos no design com programação funcional

com diferentes building blocks, é

preciso repensar as decisões de design

Sunday, October 20, 13

Page 109: Impactos no design com programação funcional

OO e FP Juntos?

Sunday, October 20, 13

Page 110: Impactos no design com 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

Sunday, October 20, 13

Page 111: Impactos no design com programação funcional

Functional Core, imperative shell.“Destroy all software - episode 72”-Gary Bernhardt, destroy on software screen cast series

Sunday, October 20, 13

Page 112: Impactos no design com programação funcional

conclusão

Sunday, October 20, 13

Page 113: Impactos no design com 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

Sunday, October 20, 13

Page 114: Impactos no design com programação funcional

Obrigado

Sunday, October 20, 13

Page 115: Impactos no design com 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

Sunday, October 20, 13