Tópicos Avançados em Programação Funcional
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2014/2015 - 2S
Ciclos de Estudo/Cursos
Língua de trabalho
Inglês
Objetivos
Aprofundar os conhecimentos de programação funcional com ênfase em algumas técnicas avançadas para maior modularidade e correção na construção de programas.
Resultados de aprendizagem e competências
No final desta unidade os alunos devem ser capazes de:
* compreender e extender programas Haskell estruturado usando classes de tipos, mónadas, functores e aplicativos:
* especificar testes de correção funcional usado propriedades e geradores QuickCheck;
* implementar linguagens de domínio específico embutidas (DSLs) como bibliotecas Haskell de combinadores.
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Programação funcional.
Programa
Polimorfismo paramétrico e polimorfismo "ad-hoc". Classes de tipos. Verificação e inferência de tipos.
Classes de tipo para estruturação de computação: functores, aplicativos e mónadas.
Programação monádica. Exemplos de mónadas de parcialidade, listas, estado, "reader" e "writers"; “parsers” monádicos. Transformadores de mónadas. Functores e functores aplicativos
Testes de correção baseados em propriedades. Uso da biblioteca QuickCheck. Definição de propriedades e geradores. Simplificação automática de contra-exemplos (shrinking).
Desenho e Implementação de linguagens espécificas de domínio embutidas (EDSLs). Implementações "shallow" e "deep".
Bibliografia Obrigatória
Bryan O'Sullivan, John Goerzen, Don Stewart; Real World Haskell, O'Reilley, 2008
Miran Lipovaca; Learn you a Haskell for Great Good!, 2011
Métodos de ensino e atividades de aprendizagem
Aulas teórico-práticas com exposição de conceitos e demonstração interativa de exemplos de estudo.
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
60,00 |
Trabalho laboratorial |
40,00 |
Total: |
100,00 |
Fórmula de cálculo da classificação final
40% * Notas de trabalhos propostos + 60% * Nota de exame
Observações
Precedência da UC "Programação Funcional" (ou equivalente).