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

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

Java Reflection in Action

Ira R. Forman

2004

Manning Publications Co.


The Art of the Metaobject Protocol

G. Kiczales, J. Rivieres, D. Bobrow

1991

MIT Press


Aspect-Oriented Software Development

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

2005

Addison Wesley Professional


Structure and Interpretation of Computer Programs

Harold Abelson, Gerald Jay Sussman

1996

MIT Press