Disciplina

Área

Área Científica de Metodologia e Tecnologias da Programação > Linguagens de Programação

Activa nos planos curriculares

MEIC-T 2021 > MEIC-T 2021 > 2º Ciclo > Área Principal > Agrupamentos > Algoritmos e Aplicações > Linguagens de Programação

MEIC-T 2015 > MEIC-T 2015 > 2º Ciclo > Agrupamentos > Algoritmos e Programação > Linguagens de Programação

MEIC-A 2021 > MEIC-A 2021 > 2º Ciclo > Area Principal > Agrupamentos > Algoritmos e Aplicações > Linguagens de Programação

MEIC-A 2015 > MEIC-A 2015 > 2º Ciclo > Agrupamentos > Algoritmos e Programação > Linguagens de Programação

Nível

Projecto (50%) + Exame (50%)

Tipo

Não Estruturante

Regime

Semestral

Carga Horária

1º Semestre

2.0 h/semana

1.5 h/semana

119.0 h/semestre

Objectivos

Compreender conceitos fundamentais em linguagens de programação. Adquirir e utilizar ferramentas para estudar rigorosamente programas de computador e para resolver problemas que envolvem linguagens de programação. Utilizar assistentes de prova interactivos. Desenhar e modelar linguagens de programação simples. Provar formalmente propriedades de programas e de linguagens de programação.

Programa

Breve história das linguagens de programação. Estudo de um assistente de prova (e.g. Coq): programação funcional, tipos de dados estruturados, polimorfismo, funções de ordem superior, provas (por simplificação, reescrita, análise de casos, indução). Sintaxe de uma linguagem de programação: árvores sintácticas abstractas, variáveis, bindings, scopes. Semântica de uma linguagem de programação: semântica operacional, semântica via interpretadores, avaliação computacional vs relacional, semântica axiomática e lógica de Hoare, semântica operacional small-step. Tipos, Cálculo Lambda simplesmente tipado, tipagem e subtyping.

Metodologia de avaliação

Projecto (50%) + Exame (50%)

Pré-requisitos

Experiência de programação

Componente Laboratorial

Implementação de conceitos fundamentais de linguagens de programação, utilizando um assistente de prova (e.g. Coq). Apoio durante a realização dos projectos. Apresentação pública dos projectos realizados e sua discussão.

Princípios Éticos

Todos os membros de um grupo são responsáveis pelo trabalho do grupo. Em qualquer avaliação, todo aluno deve divulgar honestamente qualquer ajuda recebida e fontes usadas. Numa avaliação oral, todo aluno deverá ser capaz de apresentar e responder a perguntas sobre toda a avaliação.

Componente de Programação e Computação

No curso onde esta UC é oferecida estão asseguradas as componentes de Computação e Programação de acordo com o MEPP 2122.

Componente de Competências Transversais

A avaliação inclui um projecto em grupo com apresentação pública, em que os alunos desenvolvem pensamento crítico, estratégias de resolução de problemas e criatividade; competências intrapessoais, como proactividade, espírito de iniciativa, produtividade e gestão do tempo; competências interpessoais, como trabalho de equipa, comunicação oral e liderança; e literacia dos media, como resultado da utilização de ambientes de desenvolvimento, de assistentes de prova, e da criação de apresentações por meios digitais. Finalmente, as regras da disciplina criam competências de cidadania global, nomeadamente deontologia profissional e ética. Estas competências são avaliadas fundamentalmente na realização do projectos, que constitui 50% da avaliação.

Bibliografia

Principal

Logical Foundations and Programming Language Foundations, volumes 1 and 2 of the Software Foundations series

Benjamin C. Pierce et al.

2018


Types and Programming Languages

Benjamin C. Pierce

2002

MIT Press


Essentials of Programming Languages

D. Friedman, M. Wand, and C. Haynes

2008

MIT Press


Secundária

Programming Languages and the Lambda Calculi

Mathias Felleisen and Matthew Flatt

2006


Programming Language Pragmatics

Michael L. Scott

2009

Morgan Kaufmann Publishers


Certified Programming with Dependent Types

Adam Chlipala

2013

MIT Press


Structure and Interpretation of Computer Programs

Harold Abelson, Gerald Jay Sussman

1996

MIT Press