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 > 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

1991

MIT Press


Putting Metaclasses to Work

I. Forman, S. Danforth

1998

Addison Wesley


Generative Programming: Methods, Tools, and Applications

K. Czarnecki, U. Eisenecker

2000

Addison-Wesley


Modern C++ Design

A. Alexandrescu

2001

Addison Wesley Professional


C++ Template Metaprogramming - Concepts, Tools and Techniques from Boost and Beyond

D. Abrahams, A. Gurtovoy

2005

Addison Wesley Professional


Aspect-Oriented Software Development

R. Filman, T. Elrad, S. Clarke, M. Aksit

2005

Addison Wesley Professional