Paradigmas de Linguagens de ProgramaçãoProf. Péricles Miranda
Introdução ao Paradigma Funcional
O que é uma Linguagem Funcional?
O que é umaLinguagemFuncional?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ísticasSua 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 ComputacionalEntradaSaídaProgramaAusência de estados e comandos, não existe conceito de memória.
Como vimos…Umalinguagemfuncional se caracterizapelainexistência de memóriacomoconceitoprimitivodalinguagem;Tudo é função.
Operações que dependem de MemóriaVariáveis Atualizáveis Globais e LocaisAtribuiçõesx = x + 1Alocação dinâmicaa = new Pessoa();Comandos de Repetiçãofor (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);}Xotimiza para
Mais ExemplosO 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 ExemplosO 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 ExemplosO 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 ExemplosO 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 podemosver…Análise de programasqueabusam de variáveis e orientação a objetosdificultam a análise de segmentos de umasistema.O sistema tem que ser estudadocomo um todo.
Como ProgramarFuncionalmente?Um programadorfuncionalutiliza:Comandos de seleção;Recursão / Indução;Estruturas de dados complexas;Novosconceitos de programaçãoPropostosparacompensara “deficiência” da LF;Polimorfismo, Funções de altaordem, Avaliaçãotardia, Monads, entre outros.
Linguagem HaskellLinguagemFuncionalPura;Homenagemaomatemático: Haskell Curry;Páginada Web:http://www.haskell.orgDuasimplementaçõesprincipais:Hugs (interpretador);GHC (compilador).
Linguagens Funcionais PurasLinguagemFuncional “pura”:Nãopossuimemóriacomo base dalinguagem;Exemplo: Haskell;LinguagensFuncionaisnãopuras:Possuemconceitos de memória;Exemplos: SML, Lisp, OCAML.
VantagensManipulação mais simples de programasLegibilidade;Modularidade;Prova de propriedades:addDa 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çãoInterface.
Introdução ao Paradigma Funcional
Paradigmas de Linguagem de ProgramaçãoProf. Péricles Miranda

4 introdução ao paradigma funcional

  • 1.
    Paradigmas de Linguagensde ProgramaçãoProf. Péricles Miranda
  • 2.
  • 3.
    O que éuma Linguagem Funcional?
  • 4.
    O que éumaLinguagemFuncional?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.
  • 5.
    CaracterísticasSua sintaxe encorajauma 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.
  • 6.
    CaracterísticasModelo ComputacionalEntradaSaídaProgramaAusência deestados e comandos, não existe conceito de memória.
  • 7.
    Como vimos…Umalinguagemfuncional secaracterizapelainexistência de memóriacomoconceitoprimitivodalinguagem;Tudo é função.
  • 8.
    Operações que dependemde MemóriaVariáveis Atualizáveis Globais e LocaisAtribuiçõesx = x + 1Alocação dinâmicaa = new Pessoa();Comandos de Repetiçãofor (x=0;x<10;x++) …
  • 9.
    Por que nãoUtilizar 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
  • 10.
    Por que nãoUtilizar 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);}Xotimiza para
  • 11.
    Mais ExemplosO quevai 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);}….
  • 12.
    Mais ExemplosO quevai 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);}
  • 13.
    Mais ExemplosO quevai 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);}….
  • 14.
    Mais ExemplosO quevai 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);}
  • 15.
    Como podemosver…Análise deprogramasqueabusam de variáveis e orientação a objetosdificultam a análise de segmentos de umasistema.O sistema tem que ser estudadocomo um todo.
  • 16.
    Como ProgramarFuncionalmente?Um programadorfuncionalutiliza:Comandosde seleção;Recursão / Indução;Estruturas de dados complexas;Novosconceitos de programaçãoPropostosparacompensara “deficiência” da LF;Polimorfismo, Funções de altaordem, Avaliaçãotardia, Monads, entre outros.
  • 17.
    Linguagem HaskellLinguagemFuncionalPura;Homenagemaomatemático: HaskellCurry;Páginada Web:http://www.haskell.orgDuasimplementaçõesprincipais:Hugs (interpretador);GHC (compilador).
  • 18.
    Linguagens Funcionais PurasLinguagemFuncional“pura”:Nãopossuimemóriacomo base dalinguagem;Exemplo: Haskell;LinguagensFuncionaisnãopuras:Possuemconceitos de memória;Exemplos: SML, Lisp, OCAML.
  • 19.
    VantagensManipulação mais simplesde programasLegibilidade;Modularidade;Prova de propriedades:addDa b = 2 * (a + b) = 2 * (b + a) = addD b a...
  • 20.
    Desvantagens“O mundo nãoé funcional!”;Implementações ineficientes;Mecanismos primitivos de E/S e formataçãoInterface.
  • 21.
  • 22.
    Paradigmas de Linguagemde ProgramaçãoProf. Péricles Miranda