Disciplina

Área

Área Científica de Metodologia e Tecnologia da Programação > Programação

Activa nos planos curriculares

MEIC-T 2021 > Meic-T 2021 > 2º Ciclo > 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 (25% + 25%) e dois projectos (25% + 25%), nota mínima de 7.0 na média dos testes e na média dos projectos.

Tipo

Não Estruturante

Regime

Semestral

Carga Horária

1º Semestre

2.0 h/semana

1.5 h/semana

119.0 h/semestre

Objectivos

Dominar técnicas avançadas de programação e os problemas adequados para a sua aplicação. Compreender e saber colmatar as limitações das actuais linguagens de programação. 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. 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 linguagens modernas. Protocolos de meta-objecto. Funções genéricas, métodos e despacho múltiplo. Classes e metaclasses. Protocolos de criação de instâncias, de acesso a membros, de redefinição de classes. Programação orientada a aspectos. 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 (25% + 25%) e dois projectos (25% + 25%), nota mínima de 7.0 na média dos testes e na média dos projectos.

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