View
3.316
Download
0
Category
Preview:
Citation preview
Paradigmas de Linguagens de Programação
Prof. Péricles Miranda
Introdução ao Paradigma Funcional
O que é uma Linguagem 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.
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.
CaracterísticasModelo Computacional
Entrada Programa Saída
Ausência de estados e comandos, não existe conceito de memória.
Como vimos…
• Uma linguagem funcional se caracteriza pela inexistência de memória como conceito primitivo da linguagem;
• Tudo é função.
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++) …
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
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
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);}….
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);}
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);}….
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);}
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.
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.
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).
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.
Vantagens
• Manipulação mais simples de programas– Legibilidade;– Modularidade;
• Prova de propriedades:– addD a b = 2 * (a + b) = 2 * (b + a) = addD b a
• ...
Desvantagens
• “O mundo não é funcional!”;• Implementações ineficientes;• Mecanismos primitivos de E/S e formatação– Interface.
Introdução ao Paradigma Funcional
Paradigmas de Linguagem de Programação
Prof. Péricles Miranda
Recommended