capítulo 1 paradigmas de programação - decom-ufop · 3 a crise do software 4 algumas...

63
1/29 Programação Funcional Capítulo 1 Paradigmas de Programação José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2016.2

Upload: duongtuyen

Post on 11-Nov-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

1/29

Programação Funcional

Capítulo 1

Paradigmas de Programação

José Romildo Malaquias

Departamento de ComputaçãoUniversidade Federal de Ouro Preto

2016.2

Page 2: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

2/29

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 3: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

3/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 4: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 5: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 6: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 7: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 8: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 9: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 10: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 11: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 12: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 13: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

4/29

Paradigmas de programação

Um paradigma de programação fornece e determina a visão que oprogramador possui sobre a estruturação e a execução do programa.Por exemplo:

Em programação orientada a objetos, programadores podem abstrair umprograma como uma coleção de objetos que interagem entre si.Em programação lógica os programadores abstraem o programa como umconjunto de predicados que estabelecem relações entre objetos (axiomas), euma meta (teorema) a ser provada usando os predicados.

Diferentes linguagens de programação propõem diferentes paradigmas deprogramação.Algumas linguagens foram desenvolvidas para suportar um paradigmaespecífico.Por exemplo:

Smalltalk, Eiffel e Java suportam o paradigma orientado a objetos.Haskell e Clean suportam o paradigma funcional.OCaml, LISP, Scala, Perl, Python e C++ suportam múltiplos paradigmas.

Page 14: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

5/29

Técnicas e paradigmas de programação

Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.

Page 15: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

5/29

Técnicas e paradigmas de programação

Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.

Page 16: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

5/29

Técnicas e paradigmas de programação

Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.

Page 17: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

5/29

Técnicas e paradigmas de programação

Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.

Page 18: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

5/29

Técnicas e paradigmas de programação

Geralmente os paradigmas de programação são diferenciados pelas técnicasde programação que permitem ou proíbem.Por exemplo, a programação estruturada não permite o uso de goto.Esse é um dos motivos pelos quais novos paradigmas são considerados maisrígidos que estilos tradicionais.Apesar disso, evitar certos tipos de técnicas pode facilitar a prova decorreção de um sistema, podendo até mesmo facilitar o desenvolvimento dealgoritmos.O relacionamento entre paradigmas de programação e linguagens deprogramação pode ser complexo pelo fato de linguagens de programaçãopoderem suportar mais de um paradigma.

Page 19: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 20: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 21: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 22: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 23: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 24: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 25: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 26: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 27: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 28: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 29: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 30: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 31: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

6/29

Categorias: programação imperativa e declarativa

Programação imperativaDescreve a computação como ações, enunciados ou comandos quemudam o estado (variáveis) de um programa, enfatizando comoresolver um problema.Muito parecidos com o comportamento imperativo das linguagensnaturais que expressam ordens, programas imperativos são umasequência de comandos para o computador executar.O nome do paradigma, imperativo, está ligado ao tempo verbalimperativo, onde o programador diz ao computador: faça isso, depoisisso, depois aquilo...Exemplos: paradigmas

procedimental: C, Pascal, etc, eorientado a objetos: Smalltalk, Java, etc

Programação declarativaDescreve o que o programa faz e não como seus procedimentosfuncionam.Ênfase nos resultados, no que se deseja obter.Exemplos: paradigmas

funcional: Haskell, OCaml, LISP, etc, elógico: Prolog, etc.

Page 32: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

7/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 33: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

8/29

Programação funcional

Programação funcional é um paradigma de programação que descreve umacomputação como uma expressão a ser avaliada.A principal forma de estruturar o programa é pela definição e aplicação defunções.

Page 34: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

9/29

Exemplo: quick sort em C// To sort array a[] of size n: qsort(a,0,n-1)

void qsort(int a[], int lo, int hi) {int h, l, p, t;

if (lo < hi) {l = lo;h = hi;p = a[hi];

do {while ((l < h) && (a[l] <= p))

l = l+1;while ((h > l) && (a[h] >= p))

h = h-1;if (l < h) {

t = a[l];a[l] = a[h];a[h] = t;

}} while (l < h);

a[hi] = a[l];a[l] = p;

qsort(a, lo, l-1);qsort(a, l+1, hi);

}}

Page 35: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

10/29

Exemplo: quick sort em Haskell

qs [] = []qs (x:xs) = qs (filter (<x) xs) ++

[x] ++qs (filter (>x) xs)

Observações:[] denota a lista vazia.x:xs denota uma lista não vazia cuja cabeça é x e cuja cauda é xs.Uma lista pode ser escrita enumerando os seus elementos separados por vírgula e colocadosentre colchetes.A sintaxe para aplicação de função consiste em escrever a função seguida dos argumentos,separados por espaços, como em max 10 (2+x).A função filter seleciona os elementos de uma lista que satisfazem uma determinadapropriedade.(<x) e (>x) são funções que verificam se o seu argumento é menor ou maior, respectivamente,do que x. São funções anônimas construídas pela aplicação parcial dos operadores < e >.O operador ++ concatena duas listas.

Page 36: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

11/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 37: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 38: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 39: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 40: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 41: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 42: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 43: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 44: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 45: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 46: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

12/29

A Crise do Software

Linguagens declarativas (incluindo linguagens funcionais):permitem que programas sejam escritos de forma clara, concisa, e com um altonível de abstração;suportam componentes de software reutilizáveis;incentivam o uso de verificação formal;permitem prototipagem rápida;fornecem poderosas ferramentas de resolução de problemas.

Estas características podem ser úteis na abordagem de dificuldadesencontradas no desenvolvimento de software:

o tamanho e a complexidade dos programas de computador modernoso tempo e o custo de desenvolvimento do programasconfiança de que os programas já concluídos funcionam corretamente

As linguagens funcionais oferecem um quadro particularmente ele-gante para abordar estes objetivos.

Page 47: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

13/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 48: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

14/29

Algumas características de Haskell

Programas são concisosTipagem estáticaSistema de tipos poderosoTipos e funções recursivasFunções de ordem superiorLinguagem pura (declarativa)Avaliação lazyMaior facilidade de raciocínio sobre programas

Page 49: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

15/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 50: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

16/29

Antecedentes históricos

Década de 1930:

Alonzo Church desenvolve o cálculo lambda, uma teoria de funções simples,mas poderosa.

Page 51: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

17/29

Antecedentes históricos (cont.)

Década de 1950:

John McCarthy desenvolve Lisp, a primeira linguagem funcional, comalgumas influências do cálculo lambda, mas mantendo as atribuições devariáveis.

Page 52: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

18/29

Antecedentes históricos (cont.)

Década de 1960:

Peter Landin desenvolve ISWIM, a primeira linguagem funcional pura,baseada fortemente no cálculo lambda, sem atribuições.

Page 53: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

19/29

Antecedentes históricos (cont.)

Década de 1970:

John Backus desenvolve FP, uma linguagem funcional que enfatiza funçõesde ordem superior e raciocínio sobre programas.

Page 54: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

20/29

Antecedentes históricos (cont.)

Década de 1970:

Robin Milner e outros desenvolvem ML, a primeira linguagem funcionalmoderna, que introduziu a inferência de tipos e tipos polimórficos.

Page 55: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

21/29

Antecedentes históricos (cont.)

Décadas de 1970 e 1980:

David Turner desenvolve uma série de linguagens funcionais com avaliaçãolazy, culminando com o sistema Miranda.

Page 56: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

22/29

Antecedentes históricos (cont.)

1987:

Um comitê internacional de pesquisadores inicia o desenvolvimento deHaskell, uma linguagem funcional lazy padrão.

Page 57: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

23/29

Antecedentes históricos (cont.)

2003:

O comitê publica o relatório Haskell 98, a definição de uma versão estávelda linguagem Haskell.

Page 58: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

24/29

Antecedentes históricos (cont.)

2009:

O comitê publica o relatório Haskell 2010, uma revisão da definição dalinguagem Haskell.

Page 59: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

25/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 60: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

26/29

Quem usa Haskell?

Exemplos de empresas que usam Haskell:ABN AMRO análise de riscos financeirosAT&T automatização de processamento de formuláriosBank of America Merril Lynch transformação de dadosBump servidores baseados em HaskellFacebook manipulação da base de código PHPGoogle infra-estrutura interna de TIMITRE análise de protocolos de criptografiaNVIDIA ferramentas usadas internamenteQualcomm, Inc geração de interfaces de programação para LuaThe New York Times processamento de imagens

Para maiores detalhes visite a página Haskell na indústria emhttp://www.haskell.org/haskellwiki/Haskell_in_industry.

Page 61: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

27/29

Tópicos

1 Paradigmas de programação

2 Programação funcional

3 A crise do software

4 Algumas características de Haskell

5 Antecedentes históricos

6 Algumas empresas que usam Haskell

7 Curso online

Page 62: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

28/29

Curso online de Haskell

Functional Programming in HaskellUniversidade de GlasgowInício: 19 de setembro de 2016Duração: 6 semanasDedicação: 4 horas por semanahttps://www.futurelearn.com/courses/functional-programming-haskellQuem apresentar o certificado de participação no final do semestre poderáganhar 1 ponto extra!

Page 63: Capítulo 1 Paradigmas de Programação - DECOM-UFOP · 3 A crise do software 4 Algumas características de Haskell 5 Antecedentes históricos 6 Algumas empresas que usam Haskell

29/29

Fim