4 introdução ao paradigma funcional

22
Paradigmas de Linguagens de Programação Prof. Péricles Miranda

Upload: pericles-miranda

Post on 19-Jun-2015

3.316 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 4 introdução ao paradigma funcional

Paradigmas de Linguagens de Programação

Prof. Péricles Miranda

Page 2: 4 introdução ao paradigma funcional

Introdução ao Paradigma Funcional

Page 3: 4 introdução ao paradigma funcional

O que é uma Linguagem Funcional?

Page 4: 4 introdução ao paradigma funcional

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Introdução ao Paradigma Funcional

Page 22: 4 introdução ao paradigma funcional

Paradigmas de Linguagem de Programação

Prof. Péricles Miranda