Disciplina
Programação Avançada
Á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 > Engenharia de Software > Programação Avançada
MEIC-T 2015 > MEIC-T 2015 > 2º Ciclo > Agrupamentos > Engenharia de Software > Programação Avançada
MEIC-A 2021 > MEIC-A 2021 > 2º Ciclo > Area Principal > Agrupamentos > Engenharia de Software > Programação Avançada
MEIC-A 2015 > MEIC-A 2015 > 2º Ciclo > Agrupamentos > Engenharia de Software > Programação Avançada
MEIC-T 2006 > MEIC-T 2006 > 2º Ciclo > Áreas de Especialização Complementares > Engenharia de Software > Programação Avançada
MEIC-A 2006 > MEIC-A 2006 > 2º Ciclo > Área de Especialização Principal > Engenharia de Software > Programação Avançada
Nível
Exame/Testes (50%), Trabalho prático de leitura e apresentação de uma peça de software (50%).
Tipo
Não Estruturante
Regime
Semestral
Carga Horária
1º Semestre
3.0 h/semana
1.5 h/semana
147.0 h/semestre
Objectivos
Dominar técnicas avançadas de programação e os problemas mais adequados para a sua aplicação. Compreender as limitações das actuais linguagens de programação na perspectiva das técnicas avançadas de programação. Saber colmatar as limitações das linguagens e saber adaptar as técnicas de programação à realidade actual das linguagens mais usadas. Ser capaz de ler um programa complexo, compreendê-lo, criticá-lo e melhorá-lo. Ser capaz de antecipar o impacto da utilização de técnicas avançadas no funcionamento, facilidade de desenvolvimento e facilidade de manutenção de um programa.
Programa
Estudo de casos notáveis da programação. Boas práticas de programação. Meta-programação: reflexão, instrospecção, protocolos de meta-objectos. Programação generativa: geração de código, macros, template meta-programming, interpretadores meta-circulares, avaliação parcial, manipulação de byte-code, linguagens específicas de domínio. Paradigmas de programação emergentes: programação orientada a aspectos, anotações.
Metodologia de avaliação
Exame/Testes (50%), Trabalho prático de leitura e apresentação de uma peça de software (50%).
Pré-requisitos
Componente Laboratorial
Princípios Éticos
Componente de Programação e Computação
Componente de Competências Transversais
Bibliografia
Principal
The Art of the Metaobject Protocol
G. Kiczales, J. Rivieres, D. Bobrow
Generative Programming: Methods, Tools, and Applications
C++ Template Metaprogramming - Concepts, Tools and Techniques from Boost and Beyond
Aspect-Oriented Software Development
R. Filman, T. Elrad, S. Clarke, M. Aksit