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
Dois testes (30% + 30%) e dois projectos (20% + 20%)
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 e saber colmatar essas limitações. 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. Compreender a capacidade de reflexão das linguagens de programação nas vertentes de introspecção e intercessão e nos tempos de compilação, carregamento, e execução. Compreender a diferença entre programação e meta-programação e a utilidade de modelos de código. Compreender meta-classes, protocolos de meta-objecto, e as suas capacidades de intercessão. Compreender a programação orientada a aspectos e a sua aplicação a requisitos transversais. Compreender a abstracção linguística, os avaliadores, e os avaliadores meta-circulares. Ser capaz de dotar avaliadores de mecanismos de meta-programação, de avaliação atrasada, e de avaliação não-determinística.
Programa
Reflexão, introspecção e intercessão. Reificação. Arquitecturas reflexivas. Meta-programação e modelos de código. A reflexão em Java e em Javassist. Protocolos de meta-objecto. Protocolos em CLOS. Funções genéricas e combinação de métodos. Classes e metaclasses. Protocolos de criação de instâncias, de acesso a membros, de redefinição de classes. Programação orientada a aspectos. AspectJ. Abstracção linguística, avaliadores e avaliadores meta-circulares. Macros. Avaliação atrasada. Continuações. Estilo directo e estilo de passagem de continuações. Transferência de controle não-local. Avaliação não-determinística.
Metodologia de avaliação
Dois testes (30% + 30%) e dois projectos (20% + 20%)
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
Aspect-Oriented Software Development
R. Filman, T. Elrad, S. Clarke, M. Aksit
Structure and Interpretation of Computer Programs
Harold Abelson, Gerald Jay Sussman