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

Pré-requisitos

Conhecimentos básicos de programação funcional e de programação orientada a objectos.

Componente Laboratorial

Componente prática em torno das linguagens de programação e das ferramentas a usar durante a realizaçao dos projectos de avaliação, nomeadamente, ambiente de desenvolvimento, ferramentas de controlo de versões e de construção de programas. Apoio durante a realização dos projectos. Apresentação pública dos projectos realizados e sua discussão.

Princípios Éticos

Todos os membros de um grupo são responsáveis pelo trabalho do grupo. Em qualquer avaliação, todo aluno deve divulgar honestamente qualquer ajuda recebida e fontes usadas. Numa avaliação oral, todo aluno deverá ser capaz de apresentar e responder a perguntas sobre toda a avaliação.

Componente de Programação e Computação

No curso onde esta UC é oferecida estão asseguradas as componentes de Computação e Programação de acordo com o MEPP 2122.

Componente de Competências Transversais

A avaliação inclui dois projectos em grupo com apresentação pública, em que os alunos desenvolvem pensamento crítico, estratégias de resolução de problemas e criatividade; competências intrapessoais, como proactividade, espírito de iniciativa, produtividade e gestão do tempo; competências interpessoais, como trabalho de equipa, comunicação oral e liderança; e literacia dos media, como resultado da utilização de ambientes de desenvolvimento e da criação de apresentações por meios digitais. Finalmente, as regras da disciplina criam competências de cidadania global, nomeadamente deontologia profissional e ética. Estas competências são avaliadas fundamentalmente na realização dos projectos, que constituem 40% da avaliação.

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