4 introdução ao paradigma funcional
TRANSCRIPT
![Page 1: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/1.jpg)
Paradigmas de Linguagens de Programação
Prof. Péricles Miranda
![Page 2: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/2.jpg)
Introdução ao Paradigma Funcional
![Page 3: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/3.jpg)
O que é uma Linguagem Funcional?
![Page 4: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/4.jpg)
O que é uma Linguagem Funcional?
• Programação com alto nível de abstração;• Soluções elegantes, concisas e poderosas;• Funções: computam um resultado que
depende apenas dos valores das entradas;• Forte fundamentação teórica, o que permite
mais facilmente provas de propriedades sobre os programas.
![Page 5: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/5.jpg)
Características
• Sua sintaxe encoraja uma visão totalmente modular do fluxo do programa;
• Reutilização do código previamente escrito (funções) para construir programas cada vez mais complexos;
• Geralmente não há um identificador (por exemplo a função main( ) de C e Java) para indicar o ponto onde a execução do programa inicia.
![Page 6: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/6.jpg)
CaracterísticasModelo Computacional
Entrada Programa Saída
Ausência de estados e comandos, não existe conceito de memória.
![Page 7: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/7.jpg)
Como vimos…
• Uma linguagem funcional se caracteriza pela inexistência de memória como conceito primitivo da linguagem;
• Tudo é função.
![Page 8: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/8.jpg)
Operações que dependem de Memória
• Variáveis Atualizáveis Globais e Locais• Atribuições
x = x + 1• Alocação dinâmica
a = new Pessoa();• Comandos de Repetição
for (x=0;x<10;x++) …
![Page 9: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/9.jpg)
Por que não Utilizar Memória?
• Programas que utilizam memória são mais difíceis de serem analisados.
• Exemplo: Otimização de Código:….int f(int n) { …}int g() { a = f(1) + f(1);}
…int f(int n) { …}int g() { a = 2*f(1);}
otimiza para
![Page 10: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/10.jpg)
Por que não Utilizar Memória?
• Programas que utilizam memória são mais difíceis de serem analisados.
• Exemplo: Otimização de Código:int x = 0;int f(int n) { return (x += n);}int g() { a = f(1) + f(1);}
int x = 0;int f(int n) { return (x += n);}int g() { a = 2*f(1);}
otimiza paraX
![Page 11: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/11.jpg)
Mais Exemplos
• O que vai ser impresso pela função f?
class C { int n; }
int f(C a, C b) { a.n = 2; b.n = 3; System.out.println(a.n+b.n);}….
![Page 12: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/12.jpg)
Mais Exemplos
• O que vai ser impresso pela função f?
class C { int n; }
int f(C a, C b) { a.n = 2; b.n = 3; System.out.println(a.n+b.n);}void main() { C a = new C(); f(a,a);}
![Page 13: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/13.jpg)
Mais Exemplos
• O que vai ser impresso pela função f?
class C { int n; void setN(int x) { n = x; }}
int f(C a) { a.setN(5); System.out.println(a.n);}….
![Page 14: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/14.jpg)
Mais Exemplos
• O que vai ser impresso pela função f?class C { int n; void setN(int x) { n = x; }}int f(C a) { a.setN(5); System.out.println(a.n);}class D extends C { void setN(int x) { n = 2*x; } }void main() { C a = new D(); f(a);}
![Page 15: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/15.jpg)
Como podemos ver…
• Análise de programas que abusam de variáveis e orientação a objetos dificultam a análise de segmentos de uma sistema.– O sistema tem que ser estudado como um todo.
![Page 16: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/16.jpg)
Como Programar Funcionalmente?
• Um programador funcional utiliza:– Comandos de seleção;– Recursão / Indução;– Estruturas de dados complexas;– Novos conceitos de programação
• Propostos para compensar a “deficiência” da LF;• Polimorfismo, Funções de alta ordem, Avaliação tardia, Monads,
entre outros.
![Page 17: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/17.jpg)
Linguagem Haskell
• Linguagem Funcional Pura;• Homenagem ao matemático: Haskell Curry;• Página da Web:– http://www.haskell.org
• Duas implementações principais:– Hugs (interpretador);– GHC (compilador).
![Page 18: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/18.jpg)
Linguagens Funcionais Puras
• Linguagem Funcional “pura”:– Não possui memória como base da linguagem;– Exemplo: Haskell;
• Linguagens Funcionais não puras:– Possuem conceitos de memória;– Exemplos: SML, Lisp, OCAML.
![Page 19: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/19.jpg)
Vantagens
• Manipulação mais simples de programas– Legibilidade;– Modularidade;
• Prova de propriedades:– addD a b = 2 * (a + b) = 2 * (b + a) = addD b a
• ...
![Page 20: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/20.jpg)
Desvantagens
• “O mundo não é funcional!”;• Implementações ineficientes;• Mecanismos primitivos de E/S e formatação– Interface.
![Page 21: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/21.jpg)
Introdução ao Paradigma Funcional
![Page 22: 4 introdução ao paradigma funcional](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5583e399d8b42a423f8b4ee4/html5/thumbnails/22.jpg)
Paradigmas de Linguagem de Programação
Prof. Péricles Miranda