Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Funcional Motivação Prof. Giovanny Lucero DCOMP/UFS ● Importância da Computação? ● Pensamento Computacional? ● Programação Funcional? – Programação? Funcional? ● Paradigmas de programação? Motivação ● Qual a importância da Computação? ● Por que resolveram estudar computação? Pensamento computacional ● Modo de pensar para solucionar problemas através de algoritmos – Diversidade de métodos e técnicas – Vários paradigmas Programação Programming is a way to “instruct the computer to perform various tasks” hackr.io/blog/what-is-programming ● Programação não é somente codificar ● Instruct the computer → Linguagem ● Que tipo de tarefas? “Computer programming is the process of designing and building an executable computer program for accomplishing a specific computing task” Wikipedia ● Projetar e construir ● Programa ● Implicitamente especificação “Programming is coding, modeling, simulating or presenting the solution to a problem, by representing facts, data or information using pre-defined rules and semantics, on a computer or any other device for automation” Wikiversity ● Solução de problemas ● Usando uma linguagem de programação ● Computador executa instruções muito simples tais como somar ou comparar dois números (instruções de máquina – linguagem de máquina) – Muita velocidade (GFLOPs - PC, PetaFlops - Supercomputador) – Memoria muito grande para armazenamento de resultados intermediários – Computador “entende” linguagem de máquina ● Tarefas complexas são feitas combinando muitas instruções de máquina ● Linguagens de programação de alto nível – Oferecem modelos de programação que abstraem a linguagem de máquina – Linguagens imperativas (como fazer a tarefa) ● Python, C, C++, Java, ... – Linguagens declarativas (qual é a tarefa) ● Linguagens funcionais (Haskell, Lisp, …), Lógicas (Prolog, Mercury, ..), ... Compilador Programa Linguagem de alto nível Programa Linguagem de máquina Programa Linguagem de alto nível Programa Linguagem de alto nível Programa Linguagem de alto nívelCódigo fonte Código alvo Computador Interpretador Programa Linguagem de alto nível Não há tradução O interpretador lê e executa o programa diretamente, linha por linha Compilador vs Interpretador Compilador Interpretador Traduz o programa inteiro a código de máquina Executa o código fonte linha por linha Geralmente, linguagens estaticamente tipadas Geralmente, linguagens dinamicamente tipadas Analisa o código antes de executar (erros descobertos antes - mais confiabilidade) Analisa o código durante a execução (erros descobertos na execução) Mais eficiente (velocidade e memória) Menos eficiente Menos praticidade Mais praticidade Fácil de usar Normalmente oferecem REPLs C, C++, C#, Kotlin, Java, Julia, ... Python, Ruby, Haskell, … REPL ↔ Read–Eval–Print Loop ● Programa: Conjunto de definições de dados e funções ● Computação: Avaliação de expressões/funções ● Avaliação: Similar como fazemos em álgebra ● Não há estado Funcional Função ● Relação binária entre dois conjuntos, digamos A e B, tal que um elemento de A só pode ter um correspondente no conjunto B …. ● “Caixas pretas” que recebem valores de entrada e produzem um valor que depende dos valores da entrada 34 Valores não precisam ser somente números Podem ser entidades mais elaboradas, como por exemplo figuras Funções podem ser combinadas para resolver problemas maiores coloreAzul entrada resultado escala coloreAzul escala Em Haskell, definições de funções são dadas usando equações Por exemplo somaDobro :: Int -> Int -> Int somaDobro x y = 2*(x+y) somaDobro x y 2*(x+y) O modelo computacional de cômputo é muito simples e claro – A avaliação de expressões é feita usando as equações no sentido de esquerda para a direita – Por exemplo 3 + somaDobro 4 5 → 3 + 2*(4+5) → 3 + 2*9 → 3 + 18 → 21 somaDobro x y = 2*(x+y) ● Programação funcional é só isso? ● Há outros conceitos importantes – Transparência referencial ● Determinismo, ● Sem efeitos colaterais – Funções de alta ordem – Tipos e polimorfismo paramétrico – Tipos compostos: listas – Avaliação preguiçosa Outros paradigmas de programação ● Paradigma: Modelo de programação definido por conjunto de conceitos e construções linguísticas ● Funcional: – Funções (puras), definições, funções de alta ordem, ... Outros paradigmas ● Imperativo ● Orientado a objetos ● Paralelo ● Concorrente ● Lógico ● Linguagens modernas são multi-paradigmas Por que Haskell? ● Funcional puro – Acadêmico, porém com muitos usos na indústria – Tem servido de inspiração para linguagens modernas ● Linguagem é nosso veículo – Quem dirige um Ford, dirige um Renault Tarefa obrigatória ● Instale o GHC no seu computador – https://www.haskell.org/downloads/ – Use a opção Haskell Platform e escolha o seu sistema operacional https://www.haskell.org/downloads/ Leitura Recomendada ● Capítulo 1 de – Crediné Menezes e outros. Introdução à Programação: Uma Abordagem Funcional. – Esta apostila não usa o CHCi mas o compilador Hugs, no entanto você pode usar o material como apoio durante todo o curso. O capítulo 1 é independente de compilador. ● Apostila disponível em – https://claudiaboeres.pbworks.com/f/Apostila- ProgFuncional.pdf Tarefas Recomendadas ● Haskell é uma linguagem importante no contexto do paradigma funcional? Pesquise sobre a história das linguagens de programação e quais as principais linguagens que já foram propostas, nos diversos paradigmas. ● Haskell é uma linguagem usada em escala comercial e industrial? Experimente fazer a pesquisa haskell in industry para descobrir empresas que usam Haskell no mundo ● Há outras linguagens funcionais popularmente usadas? Pesquise por Erlang, F#, Scala, Clojure, ... ● As disciplinas de programação são importantes? Pesquise grades do seu curso em outras universidades nacionais e internacionais e identifique as disciplinas de linguagens de programação que são ensinadas. Quais paradigmas ou linguagens são ensinados? ● Estamos fazendo um bom curso? Pesquise quais são as melhores cursos de Computação do país e veja nossa classificação. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27
Compartilhar