Departamento de Informática (UM)

Página de Unidade Curricular 🇬🇧

DesignaçãoCódigoCursoRegimeRegente

Cálculo de Programas

14309 [J305N1]

Licenciatura em Engenharia Informática [ENGINF]

S5

José Nuno Fonseca Oliveira

Objetivos

Esta disciplina tem por principal objectivo ensinar métodos que permitem uma abordagem composicional e escalável ao desenvolvimento de software, tendo por base a teoria algébrica da programação funcional. Sendo a construção de programas uma actividade essencialmete colectiva, há um trabalho de grupo (em Haskell) que complementa a componente teórica dos conteúdos, estes objecto de aulas teórico-práticas onde se resolvem exercícios de cálculo de programas funcionais.

Programa

1. Motivação. Teoria e método em programação. Cálculo e raciocínio sobre programas. Composicionalidade. Combinadores de programas. Modularidade e reutilização. «Pacotes» de programação.
2. Programação funcional: motivação e história. Composição de funções. Noções de abstração e de isomorfismo. Iniciação à estruturação de dados. Combinadores básicos e propriedades estruturais (reflexão, fusão, absorção, cancelamento e functorialidade). Lei da troca.
3. Álgebra de um tipo de dados. Introdução às estruturas de dados indutivas regulares. Álgebras de functores. A triologia «cata-ana-hilo».
4. Recursividade polinomial. Caso de estudo: algoritmos de ordenação. Parametrização e polimorfismo. Inferência de tipos polimórficos e de «propriedades grátis».
5. Programação genérica. Functores de tipo. Introdução ao politipismo.
6. Programação funcional com efeitos. Mónades e sua teoria. Construção de programas monádicos. Exemplos: tratamento de erros, processamento de listas, computações probabilísticas e computações com estado. Referência ao mónade 'input/output'.

Bibliografia

J. N. Oliveira. Program Design by Calculation, 2008 (Chapters 2, 3 and 4). Draft of textbook in preparation, current version: October 2019. Available from http://www.di.uminho.pt/~jno/ps/pdbc.pdf . Informatics Department, University of Minho.

A. Cunha. Cálculo de Programas: notas teórico-práticas. Departamento de Informática, Universidade do Minho, 2005.

R. Bird and O. de Moor. Algebra of Programming. Series in Computer Science. Prentice-Hall International, 1997. C. A. R. Hoare, series editor. BGUM 510.5-B .

Resultados da aprendizagem

- Programação composicional: aprender a escrever programas complexos por composição de programas mais simples (princípio da composicionalidade).
- Programação construtiva: aprender a escrever programas funcionais com recurso a combinadores algébricos.
- Transformação de programas: recurso à algebra da programação para se obter eficiência sem sacrifício da correção.
- Arquitectura da programação: Análise, compreensão e catalogação de programas: recurso à (hilo-)factorização algorítmica como forma de se perceber a arquitectura dos algoritmos e sua taxonomia.
- Síntese de programas: cálculo de programas cíclicos a partir de definições indutivas da matemática.
- Programação funcional avançada: construir e raciocinar sobre programas funcionais com efeitos sob a forma de mónades.

Método de avaliação

Há 2 regimes da avaliação à escolha para obter aprovação nesta UC, a saber:
. Regime A) 2 testes sem consulta cuja média seja = 10, com nota máxima de 14 valores. Aos alunos com média no intervalo [8..10[ será facultada a possibilidade de fazerem uma oral.
. Regime B) 2 testes sem consulta com nota mínima 8, cuja média valerá 60% da nota final + realização de um trabalho prático de grupo de 3 alunos com nota mínima 10 (40% da nota final). O trabalho é avaliado através de um relatório e uma defesa oral.

Funcionamento

Turno: T 1; Docente: José Nuno Fonseca Oliveira; Dep.: DI; Horas: 30.
Turno: TP 1; Docente: Daniel Rodrigues Pacheco Murta; Dep.: DI; Horas: 30.
Turno: T 2; Docente: José Nuno Fonseca Oliveira; Dep.: DI; Horas: 30.
Turno: TP 2; Docente: José Nuno Fonseca Oliveira; Dep.: DI; Horas: 30.
Turno: TP 3; Docente: Olga Maria Gomes Martins Pacheco; Dep.: DI; Horas: 30.
Turno: TP 4; Docente: Olga Maria Gomes Martins Pacheco; Dep.: DI; Horas: 30.
Turno: TP 5; Docente: Daniel Rodrigues Pacheco Murta; Dep.: DI; Horas: 30.

[ Outras UCs do Departamento ]