Saltar para:
Logótipo
Você está em: Início > CC4028
Mapa das Instalações
FC6 - Departamento de Ciência de Computadores FC5 - Edifício Central FC4 - Departamento de Biologia FC3 - Departamento de Física e Astronomia e Departamento GAOT FC2 - Departamento de Química e Bioquímica FC1 - Departamento de Matemática

Tópicos Avançados em Programação Funcional

Código: CC4028     Sigla: CC4028     Nível: 400

Áreas Científicas
Classificação Área Científica
OFICIAL Ciência de Computadores

Ocorrência: 2019/2020 - 2S Ícone do Moodle

Ativa? Sim
Página Web: http://www.dcc.fc.up.pt/~pbv/aulas/tapf
Unidade Responsável: Departamento de Ciência de Computadores
Curso/CE Responsável: Mestrado em Ciência de Computadores

Ciclos de Estudo/Cursos

Sigla Nº de Estudantes Plano de Estudos Anos Curriculares Créditos UCN Créditos ECTS Horas de Contacto Horas Totais
M:CC 4 PE a partir do ano letivo de 2014 1 - 6 42 162
MI:ERS 3 Plano Oficial desde ano letivo 2014 4 - 6 42 162
Mais informaçõesA ficha foi alterada no dia 2019-07-31.

Campos alterados: Fórmula de cálculo da classificação final, Avaliação especial, Componentes de Avaliação e Ocupação, Tipo de avaliação, Melhoria de classificação

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:


  1. compreender a noção de classe de tipos e a sua tradução usando passagem de dicionários;  

  2. compreender as propriedades algorítmicas e complexidade de algumas estruturas de dados puramente funcionais básicas (ex: listas, árvores de pesquisa)

  3. conhecer estruturas algébricas fundamentais para estruturação de programas funcionais: semigrupos, monoides, mónadas, functores e functores aplicativos;

  4. saber usar e implementar "parsers" funcionais usando combinadores;

  5. conhecer a noção de testes de propriedades e ser capaz especificar testes e geradores usando a biblioteca QuickCheck;

  6. 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).
Recomendar Página Voltar ao Topo
Copyright 1996-2025 © Faculdade de Ciências da Universidade do Porto  I Termos e Condições  I Acessibilidade  I Índice A-Z  I Livro de Visitas
Página gerada em: 2025-06-15 às 00:48:29 | Política de Utilização Aceitável | Política de Proteção de Dados Pessoais | Denúncias