Tópicos Avançados em Programação Funcional
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2019/2020 - 2S 
Ciclos de Estudo/Cursos
Língua de trabalho
Português - Suitable for English-speaking students
Obs.: All course materials are in english. English exams will be provided if required.
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 a noção de classe de tipos e a sua tradução usando passagem de dicionários;
- compreender as propriedades algorítmicas e complexidade de algumas estruturas de dados puramente funcionais básicas (ex: listas, árvores de pesquisa)
- conhecer estruturas algébricas fundamentais para estruturação de programas funcionais: semigrupos, monoides, mónadas, functores e functores aplicativos;
- saber usar e implementar "parsers" funcionais usando combinadores;
- conhecer a noção de testes de propriedades e ser capaz especificar testes e geradores usando a biblioteca QuickCheck;
- conhecer a noção de linguagens de domínio específico embutidas (EDSLs) e ser capaz de implementar EDSLs simples como uma biblioteca (e.g. para domínos matemáticos ou geométricos) em Haskell.
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Programação funcional elementar (ex: a unidade curricular CC1005)
Programa
Revisão da linguagem Haskell.
Estruturas de dados puramente funcionais; noção de imutabilidade e partilha de sub-estruturas. Visão operacional e custo asimptótico da execução de programas funcionais. Complexidade de pior caso em alguns exemplos com listas e árvores. Algumas estruturas de dados fundamentais.
Polimorfismo paramétrico e polimorfismo "ad-hoc". Classes de tipos. Verificação e inferência de tipos. Tradução de classes de tipos usando passagem de dicionários.
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". Transformadores de mónadas. Functores e functores aplicativos.
Exemplo de programação com mónadas e aplicativos: definição de "parsers" puramente funcionais com combinadores. Biblioteca Parsec.
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 especificas de domínio embutidas (EDSLs). Implementações "shallow" e "deep".
Bibliografia Obrigatória
Graham Hutton;
Programming in Haskell. ISBN: 978-0-521-69269-4
Miran Lipovaca; Learn you a Haskell for Great Good!, 2011
Bibliografia Complementar
Bryan O'Sullivan, John Goerzen, Don Stewart; Real World Haskell, O'Reilley, 2008
Observações Bibliográficas
Bibliografia sobre tópicos especializados serão fornecidas durante o curso usando artigos e "lecture notes".
Métodos de ensino e atividades de aprendizagem
Aulas teórico-práticas com exposição de conceitos, demonstração interativa de exemplos de estudo e acompanhamento de trabalhos propostos.
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
60,00 |
Trabalho prático ou de projeto |
40,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
84,00 |
Frequência das aulas |
42,00 |
Trabalho laboratorial |
36,00 |
Total: |
162,00 |
Obtenção de frequência
N/A
Fórmula de cálculo da classificação final
A classificação final é calcula como:
40% (Classificação do trabalhos proposto) + 60% (Classificação no exame escrito).
A classificação mínima no exame escrito é 40%.
A fórmula acima é válida para época normal, de recurso, para melhoria de classificação e para épocas especiais.
Avaliação especial (TE, DA, ...)
A classificação final é calcula como:
40% (Classificação do trabalho proposto) + 60% (Classificação no exame escrito).
A classificação mínima no exame escrito é 40%.
A fórmula acima é válida para época normal, de recurso, para melhoria de classificação e para épocas especiais.
Melhoria de classificação
A classificação final é calcula como:
40% (Classificação do trabalho proposto) + 60% (Classificação no exame escrito).
A classificação mínima no exame escrito é 40%.
A fórmula acima é válida para época normal, de recurso, para melhoria de classificação e para épocas especiais.
Observações
Precedência da UC CC1005 "Programação Funcional" (ou equivalente).