Departamento de Informática (UM)

Página de Unidade Curricular

DesignaçãoCódigoCursoRegimeRegente

Programação Funcional

14294 [J301N4]

Licenciatura em Engenharia Informática [ENGINF]

S1

Maria João Gomes Frade

Objetivos

Esta UC corresponde a uma introdução ao paradigma funcional da programação. É usada a linguagem de programação Haskell que não requer dos alunos conhecimentos sobre a arquitetura física dos computadores e que para além dos tópicos fundamentais da programação funcional permite abordar conceitos avançados.

Programa

1. Introdução ao paradigma funcional de programação. Aspectos básicos da linguagem Haskell: valores, expressões e tipos. O mecanismo de avaliação. Inferência de tipos. Definições multi-clausais de funções. Polimorfismo.
2. Listas. Funções recursivas sobre listas. Modelação de problemas usando listas.
3. Algoritmos de ordenação de listas: insertion sort, quick sort e merge sort.
4. Ordem superior. Padrões de computação. Programação com funções de ordem superior.
5. Tipos algébricos. Definição de novos tipos e sua utilização na modelação de problemas.
6. Árvores. Árvores binárias, árvores de procura, árvores irregulares e algoritmos associados.
7. O mecanismo de classes no tratamento do polimorfismo e da sobrecarga de funções.
8. O tratamento puramente funcional do input/output. O monade IO.

Bibliografia

Bird, R. (1998). Introduction to Functional Programming using Haskell. Prentice-Hall.

Valença, J. M., Barros, J. B. (1999). Fundamentos da Computação. Livro II: Programação Funcional, Universidade Aberta.

Thompson, S. (2011). Haskell: the Craft of Functional Programming (3rd ed.). Addison-Wesley.

Hutton, G. (2016). Programming in Haskell (2nd ed.). Cambridge University Press.

Resultados da aprendizagem

No fim da disciplina, o aluno deverá ser capaz de:
- Resolver problemas de programação decompondo-os em problemas mais pequenos;
- Desenvolver e implementar algoritmos recursivos sobre listas e sobre árvores;
- Desenvolver programas tirando partido da utilização de funções de ordem superior;
- Aplicar a noção de tipo principal e de polimorfismo;
- Definir tipos algébricos, enquadrá-los na hierarquia de classes e programar com esses tipos;
- Escrever programas interativos.

Método de avaliação

A avaliação é feita por um teste final escrito e/ou exame de recurso. O acesso ao teste final é feito através da resposta a uma questão escolhida aleatoriamente de um conjunto de 50 questões que os alunos conhecem antecipadamente. Essas questões são uma parte do repositório de desafios de programação que estão disponibilizados no sistema de "online coding" referido acima.

Funcionamento

Turno: T 1; Docente: Maria João Gomes Frade; Dep.: DI; Horas: 30.
Turno: TP 1; Docente: Maria João Gomes Frade; Dep.: DI; Horas: 30.
Turno: T 2; Docente: João Alexandre Baptista Vieira Saraiva; Dep.: DI; Horas: 30.
Turno: TP 2; Docente: Maria João Gomes Frade; Dep.: DI; Horas: 30.
Turno: TP 3; Docente: João Alexandre Baptista Vieira Saraiva; Dep.: DI; Horas: 30.
Turno: TP 4; Docente: Catarina Araújo Machado; Dep.: DI; Horas: 30.
Turno: TP 5; Docente: João Alexandre Baptista Vieira Saraiva; Dep.: DI; Horas: 30.
Turno: TP 6; Docente: José Bernardo Santos Monteiro Vieira Barros; Dep.: DI; Horas: 30.

[ Outras UCs do Departamento ]