4 introdução ao paradigma funcional

4.940 visualizações

Publicada em

1 comentário
3 gostaram
Estatísticas
Notas
  • Muito bom, eu só fiquei perdido na hora de entender o que 'f' imprime! rsrs... tenho uma apresentação para fazer em sala de aula ( Trabalho ) e esse slide do Prof. Péricles Miranda é perfeito, me ajudou bastante! agora eu compreendo, agora tenho que fazer mais detalhado =)
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
Sem downloads
Visualizações
Visualizações totais
4.940
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
132
Comentários
1
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

4 introdução ao paradigma funcional

  1. 1. Paradigmas de Linguagens de Programação<br />Prof. Péricles Miranda<br />
  2. 2. Introdução ao Paradigma Funcional<br />
  3. 3. O que é uma Linguagem Funcional?<br />
  4. 4. O que é umaLinguagemFuncional?<br />Programação com alto nível de abstração;<br />Soluções elegantes, concisas e poderosas;<br />Funções: computam um resultado que depende apenas dos valores das entradas;<br />Forte fundamentação teórica, o que permite mais facilmente provas de propriedades sobre os programas.<br />
  5. 5. Características<br />Sua sintaxe encoraja uma visão totalmente modular do fluxo do programa;<br />Reutilização do código previamente escrito (funções) para construir programas cada vez mais complexos;<br />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.<br />
  6. 6. CaracterísticasModelo Computacional<br />Entrada<br />Saída<br />Programa<br />Ausência de estados e comandos, <br />não existe conceito de memória.<br />
  7. 7. Como vimos…<br />Umalinguagemfuncional se caracterizapelainexistência de memóriacomoconceitoprimitivodalinguagem;<br />Tudo é função.<br />
  8. 8. Operações que dependem de Memória<br />Variáveis Atualizáveis Globais e Locais<br />Atribuições<br />x = x + 1<br />Alocação dinâmica<br />a = new Pessoa();<br />Comandos de Repetição<br />for (x=0;x<10;x++) …<br />
  9. 9. Por que não Utilizar Memória?<br />Programas que utilizam memória são mais difíceis de serem analisados.<br />Exemplo: Otimização de Código:<br />….<br />int f(int n) {<br /> …<br />}<br />int g() {<br /> a = f(1) + f(1);<br />}<br />…<br />int f(int n) {<br /> …<br />}<br />int g() {<br /> a = 2*f(1);<br />}<br />otimiza para<br />
  10. 10. Por que não Utilizar Memória?<br />Programas que utilizam memória são mais difíceis de serem analisados.<br />Exemplo: Otimização de Código:<br />int x = 0;<br />int f(int n) {<br /> return (x += n);<br />}<br />int g() {<br /> a = f(1) + f(1);<br />}<br />int x = 0;<br />int f(int n) {<br /> return (x += n);<br />}<br />int g() {<br /> a = 2*f(1);<br />}<br />X<br />otimiza para<br />
  11. 11. Mais Exemplos<br />O que vai ser impresso pela função f?<br />class C { int n; }<br />int f(C a, C b) {<br /> a.n = 2;<br /> b.n = 3;<br /> System.out.println(a.n+b.n);<br />}<br />….<br />
  12. 12. Mais Exemplos<br />O que vai ser impresso pela função f?<br />class C { int n; }<br />int f(C a, C b) {<br /> a.n = 2;<br /> b.n = 3;<br /> System.out.println(a.n+b.n);<br />}<br />void main() {<br /> C a = new C();<br /> f(a,a);<br />}<br />
  13. 13. Mais Exemplos<br />O que vai ser impresso pela função f?<br />class C { <br /> int n; <br /> void setN(int x) { n = x; }<br />}<br />int f(C a) {<br /> a.setN(5);<br /> System.out.println(a.n);<br />}<br />….<br />
  14. 14. Mais Exemplos<br />O que vai ser impresso pela função f?<br />class C { <br /> int n; <br /> void setN(int x) { n = x; }<br />}<br />int f(C a) {<br /> a.setN(5);<br /> System.out.println(a.n);<br />}<br />class D extends C { void setN(int x) { n = 2*x; } }<br />void main() {<br /> C a = new D();<br /> f(a);<br />}<br />
  15. 15. Como podemosver…<br />Análise de programasqueabusam de variáveis e orientação a objetosdificultam a análise de segmentos de umasistema.<br />O sistema tem que ser estudadocomo um todo.<br />
  16. 16. Como ProgramarFuncionalmente?<br />Um programadorfuncionalutiliza:<br />Comandos de seleção;<br />Recursão / Indução;<br />Estruturas de dados complexas;<br />Novosconceitos de programação<br />Propostosparacompensara “deficiência” da LF;<br />Polimorfismo, Funções de altaordem, Avaliaçãotardia, Monads, entre outros.<br />
  17. 17. Linguagem Haskell<br />LinguagemFuncionalPura;<br />Homenagemaomatemático: Haskell Curry;<br />Páginada Web:<br />http://www.haskell.org<br />Duasimplementaçõesprincipais:<br />Hugs (interpretador);<br />GHC (compilador).<br />
  18. 18. Linguagens Funcionais Puras<br />LinguagemFuncional “pura”:<br />Nãopossuimemóriacomo base dalinguagem;<br />Exemplo: Haskell;<br />LinguagensFuncionaisnãopuras:<br />Possuemconceitos de memória;<br />Exemplos: SML, Lisp, OCAML.<br />
  19. 19. Vantagens<br />Manipulação mais simples de programas<br />Legibilidade;<br />Modularidade;<br />Prova de propriedades:<br />addDa b = 2 * (a + b) = 2 * (b + a) = addD b a<br />...<br />
  20. 20. Desvantagens<br />“O mundo não é funcional!”;<br />Implementações ineficientes;<br />Mecanismos primitivos de E/S e formatação<br />Interface.<br />
  21. 21. Introdução ao Paradigma Funcional<br />
  22. 22. Paradigmas de Linguagem de Programação<br />Prof. Péricles Miranda<br />

×