Disciplina
Linguagens de Programação
Área
Área Científica de Metodologia e Tecnologias da Programação > 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
Types and Programming Languages
Essentials of Programming Languages
D. Friedman, M. Wand, and C. Haynes
Secundária
Programming Languages and the Lambda Calculi
Mathias Felleisen and Matthew Flatt
Programming Language Pragmatics
Certified Programming with Dependent Types
Structure and Interpretation of Computer Programs
Harold Abelson, Gerald Jay Sussman