| Apresentação |
|---|
| Alunos |
| Material |
| Sumários | Calendário |
| Equipa docente | Horário |
| Regime de Avaliação |
| Atendimento |
| Bibliografia |
| Anos anteriores |
Avisos
19-Out: Teste de 24-Out - os alunos que preferirem ter o enunciado em inglês devem assinalar com “EN” a coluna C da
folha de inscrição.
16-Out: está disponível, em Material, a
ficha nrº 5 que será assunto das aulas TP da próxima semana.
12-Out: Teste de 24-Out - solicita-se aos alunos que façam o registo que é pedido nesta
folha para a equipa docente ter uma medida do número de testes a copiar (o objectivo é reduzir o desperdício de papel, beneficiando-se com isso o ambiente).
Bem vindo à página da edição de 2026/27 da unidade curricular de Cálculo de Programas. O principal objectivo desta disciplina é o ensino de métodos que estão na base da abordagem científica ao desenvolvimento de software.
A palavra “programa” vem do grego “programma”, uma derivação de “prographein” = “pro” (antes) + “graphein” (escrever). Isto sugere que alguém que programa deve pensar antes no que vai fazer.
A indústria de software espera das universidades um ensino sistemático da programação, i.e. científico. Só assim haverá garantias de que não há erros de programação. Tal como noutros ramos da engenharia, para isso é preciso introduzir a noção de cálculo em programação, isto é, uma disciplina que nos ajude a pensar os programas, raciocinar sobre eles e obter versões eficientes sem introduzir erros.
O Departamento de Informática da Universidade do Minho tem uma longa tradição neste tipo de ensino. Com quase 25 anos de leccionação, Cálculo de Programas é uma das unidades curriculares que ensinam tais competências. Mais do que tecnologia ensina-se método, que é afinal aquilo que a maioria dos programadores acaba por não ter.
Esta UC é dada aos cursos de Engenharia Informática e Ciências da Computação. As respectivas páginas institucionais são as seguintes:
Conteúdos segundo a taxonomia ACM (5 ECTS no total):
Programação composicional: aprender a escrever programas complexos por composição de programas mais simples (princípio da composicionalidade).
Programação paralela: aprender a escrever programas funcionais que exibem paralelismo computacional.
Transformação de programas: recurso à algebra da programação para se obter eficiência sem sacrifício da correcção.
Arquitectura da programação: Análise, compreensão e catalogação de programas: recurso à factorização em pares “fold” + “unfold” (hilomorfismos) como forma de se perceber a arquitectura dos algoritmos e sua taxonomia.
Síntese de programas: cálculo de ciclos-for 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.
40 anos de Métodos Formais na Universidade do Minho) (2024).
Is abstraction the key to computing? por Jeff Kramer (2007).
Programming and Maths por Harold Carr (LambdaConf 2015).
Efeméride: foi em 1978 que o cientista da IBM John Backus publicou o artigo da sua Turing Award - Can Programming be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs - em que declarou as linguagens convencionais incapazes para os desafios que se anunciavam (arquitecturas paralelas), promovendo a programação funcional e iniciando a disciplina da álgebra da programação.