Material do curso de Programação Declarativa

Hoje apresento-lhes o material de suporte que utilizei na disciplina de Programação Declarativa. Ministrei-a no último semestre de aulas na Universidade Federal de Sergipe, mais especificamente em 2011/2.

Nessa disciplina, abordamos tanto o paradigma da programação funcional, quanto o paradigma da programação lógica, e devo dizer que foi um verdadeiro desafio para mim, não somente porque já não estudava Haskell (programação funcional) há mais de cinco anos, como também porque tudo o que eu sabia de Prolog resumia-se a uma ou duas aulas que tive durante a disciplina de Inteligência Artificial, ou seja, um desafio e tanto para elaborar todo o conteúdo enquanto aprendendo, e tudo isso durante um período letivo que já havia começado atrasado!

Durante a mesma, elaborei todo o material em apresentações para Microsoft Powerpoint (formato PPT), bem como escrevi os códigos-fonte dos exemplos em arquivos separados.

Bem, no fim das contas, acredito que o curso foi muito bem aplicado e muitos aprenderam este paradigma tão diferente da programação imperativa, nossa “velha amiga”.

E aqui está a apresentação composta por todos os slides usados em aula (um total de 305 slides :) ) em formato PPT mais os arquivos com códigos-fonte:

Material do curso de Programação Declarativa

Abaixo encontra-se a estrutura das aulas (em outra oportunidade espero publicar aqui artigos com o conteúdo textual de cada uma dessas aulas, mas acho que vai demorar bastante até que eu tenha tempo para fazer isso!):

  • Aula 01 – Paradigmas da programação
    • Programação imperativa
      • Programação estruturada
      • Programação orientada a objetos
      • Programação concorrente
    • Programação declarativa
      • Programação funcional
      • Programação lógica
      • Programação restritiva
    • Linguagens de programação multiparadigma
  • Aula 02 – Introdução à programação funcional
    • O que é uma função?
    • Exemplos de funções
    • Tipos de dados
    • A linguagem Haskell
    • Hugs 98
    • WinHugs
    • Exemplo de programa
    • Exercícios
  • Aula 03 – Tipos básicos e definições
    • Booleanos / lógicos
    • Inteiros
    • Caracteres
    • Fracionários
    • Indentação do código
    • Sobrecarga
    • Identificadores
    • Palavras reservadas
    • Exercícios
  • Aula 04 – Projetando e escrevendo programas
    • Eu sei exatamente o que preciso fazer?
    • Quais tipos de dados são necessários?
    • Que informações já possuo?
    • Posso dividir o problema em partes menores?
    • Posso usar recursão para resolver meu problema?
    • Exercícios
  • Aula 05 – Tuplas, listas e strings
    • Tuplas
    • Listas
    • Strings
    • Declaração de tipos
    • Funções genéricas
    • Exercícios
  • Aula 06 – Definições locais
    • Definições locais
    • Cláusula where
    • Expressão let
    • Escopo
  • Aula 07 – Funções sobre listas
    • Definições por casamento de padrões
    • A construção case
    • Recursão primitiva sobre listas
    • Exercícios
  • Aula 08 – Padrões de computação e funções de alta ordem
    • Padrões de computação sobre listas
    • Mapeamento (mapping)
      • A função map
    • Filtragem (filtering)
      • A função filter
    • Redução (folding)
      • A função foldr1
      • A função foldr
    • Funções de alta ordem
  • Aula 09 – Funções como valores
    • Definição a nível de função
    • Composição de funções
    • Cuidados com as composições
    • Expressões definindo funções
    • Notação Lambda
    • Aplicação parcial
    • Seção de operador
    • Currying e Uncurrying
    • Exercícios
  • Aula 10 – Polimorfismo e classes de tipos
    • Polimorfismo paramétrico e sobrecarga
    • Função de ordenação – caso 1
    • Classe de tipos
    • Função de ordenação – caso 2
    • Definição de uma classe e de uma instância
    • Exercícios
  • Aula 11 – Tipos algébricos
    • Por que tipos algébricos?
    • Introduzindo tipos algébricos
    • Tipos enumerados
    • Tipos produtos
    • Tipos alternativos
    • Definição geral de um tipo algébrico
    • Derivando instâncias de classes
    • Tipos algébricos recursivos
    • Construtores infix
    • Tipos algébricos polimórficos
  • Aula 12 – Tipos abstratos de dados
    • Por que tipos abstratos de dados?
    • Exemplo de um TAD
    • Introduzindo newtype
    • Instanciando classes
    • Exercícios
  • Aula 13 – Avaliação preguiçosa
    • Definição
    • Exemplos
    • Pontos-chave da avaliação preguiçosa
    • Cálculo para casamento de padrões
    • Cálculo para guardas
    • Cálculo para definições locais
  • Aula 14 – Introdução à programação lógica
    • O que é programação lógica?
    • Exemplos de inferência
    • Bases da programação lógica
    • Aplicações
    • Vantagens e desvantagens
    • A linguagem Prolog
    • Instruções em Prolog
    • Exemplo de programa e consulta
    • Variáveis em Prolog
    • Formas de declaração de fatos
    • Observações sobre declaração de fatos
    • Formas de consultas
    • Operadores
    • Conjunção
    • Disjunção
    • SWI-Prolog
    • Comandos trace e notrace
    • Exercícios
  • Aula 15 – Recursividade
    • Introdução
    • Operador cut ( ! )
    • Comando fail
    • Operador not
    • Exercícios
  • Aula 16 – Listas
    • Introdução
    • Manipulando listas
    • Predicado member
    • Predicado append
    • Predicado length
    • Exercícios
  • Aula 17 – Aritmética
    • Série de exercícios envolvendo cálculos aritméticos

Apesar de serem enumeradas aqui como sendo 17 aulas, algumas delas requereram mais de um dia de aula e cada dia de aula na verdade são duas horas-aula, totalizando assim as 60 horas-aula da disciplina de Programação Declarativa.

Se você gostou deste artigo, que tal...

Material do Curso de Programação 1

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
 

Leave a Reply

Your email address will not be published. Required fields are marked *

Email
Print