Faculdade

Ensino

Unidades Curriculares

O Curso de Doutoramento é constituído por unidades curriculares (UC) Obrigatórias, Avançadas, e Complementares, estruturadas de acordo com a tabela abaixo.

  • UC Obrigatórias: "Seminários de Investigação" e "Comunicação Técnica e Científica";
  • UC Avançadas: unidades curriculares do Programa de Doutoramento que abordam temas específicos nas áreas de Inteligência Artificial, Computação Gráfica e Multimédia, Sistemas e Redes de Computadores, Linguagens e Modelos de Programação, e Engenharia de Software;
  • UC Complementares: "Estudos Complementares" e "Estudo Livre". Estas podem ser UC Avançadas ou de outro Programa de Doutoramento da NOVA ou programas doutorais conjuntos (tais como o Dual Degree com CMU, Dual Degree com «UT Austin»,«EPCL», ou programas de Doutoramento do IST e FCUL no contexto do Protocolo NICE). A UC “Estudo Livre” pode ainda ser instanciada com outras atividades relevantes para o trabalho do estudante, como a participação em Escolas de Verão/Inverno ou na Escola Doutoral da NOVA.

 

Os estudantes devem completar um total de 30 ECTS, incluindo:

  • 6 ECTS em UC Obrigatórias;
  • No mínimo 12 ECTS em UC Avançadas;
  • No mínimo 12 ECTS em UC Complementares;

 

UC OBRIGATÓRIAS CREDITOS TIPO SEMESTRE
(15/16)
Seminário de Investigação 3 Obrigatória ambos
Comunicação Técnica e Científica 3 Obrigatória

UC AVANÇADAS

Inteligência  Artificial

Programação por Restrições 6 Optativa  
Representação de Conhecimento, Raciocínio e Agentes 6 Optativa
Aprendizagem Automática e Extração de Conhecimento 6 Optativa
Extração de Conhecimento de Dados 6 Optativa  
Computação Gráfica e Multimédia Modelação de Computação Gráfica 6 Optativa  
Pesquisa de Dados Web e de Media 6 Optativa
Sistemas e Redes de Computadores Segurança de Sistemas e Comunicações 6 Optativa
Computação Paralela, Grid e Autonómica 6 Optativa
Sistemas Transaccionais 6 Optativa
Ambientes Múlti-Núcleo Heterogéneos 6 Optativa
Linguagens e Modelos de Programação Princípios de Linguagens de Programação 6 Optativa
Engenharia de Software Desenvolvimento Avançado de Software  6 Optativa
Engenharia de Software Experimental 6 Optativa
Estudos Avançados* 6 Optativa Livre

UC COMPLEMENTARES

Estudos Complementares

6 Optativa Livre
Estudo Livre 6 Optativa Livre

* Os estudantes que desejem obter os 12 créditos em UC Avançadas na mesma área devem optar por uma UC de Estudos Avançados, que possa ser instanciada por qualquer outra UC Avançada.

Inteligência Artificial

KRRA - Representação de Conhecimento, Raciocínio e Agentes

Docentes: José Júlio Alferes, Carlos Damásio, João Leite

Descrição: A unidade curricular fornece as bases fundamentais para o estudo avançado de formalismos do estado-da-arte de representação de conhecimento e raciocínio e apresenta uma visão panorâmica desse estado-da-arte, explorando as suas aplicações na Web Semântica e em Sistemas Multi-Agente.

Introduz a teoria e técnicas para a definição de semânticas para linguagens de representação de conhecimento, nomeadamente para as baseadas em Programação em Lógica, incluindo o estudo das definições baseadas em pontos-fixos e em lógica modal (em particular definição de semânticas disjuntivas, paraconsistentes, difusas e probabilisticas).

Aborda linguagens e raciocínio baseados em Lógicas de Descrição e sua integração com sistemas de regras, nomeadamente através de lógicas híbridas, com especial interesse no contraste dos raciocínios baseados nos pressupostos do mundo fechado e aberto. Serão investigadas aplicações na área da Web Semântica.

A aplicação de lógica e programação em lógica nos sistemas multi-agente será explorada, nomeadamente nos sistemas 2APL, Jason, Congolog, etc.

 

CP - Programação por Restrições

Docentes: Francisco Azevedo, Pedro Barahona, Jorge Cruz, Ludwig Krippahl

Descrição: Esta unidade curricular aborda o estado da arte na tecnologia de programação com restrições, que permite resolver eficientemente problemas combinatórios de complexidade não trivial em vários domínios gerais, tais como domínios finitos, conjuntos, grafos e domínios contínuos, e ainda alguns domínios mais específicos (por exemplo, em bioinformática).

O curso começa com uma breve visão geral dos conceitos básicos, nomeadamente propagação de restrições e  manutenção de consistência, a que se segue um estudo sobre tópicos avançados em domínios finitos (heurísticas, restrições globais, restrições redundantes e seu mapeamento, exploração de simetrias e optimização) e as suas adaptações para outros domínios.

Os principais problemas das técnicas estudadas são discutidos, em conjunto com as direções de investigação seguidas actualmente para as superar. Em particular, a investigação que se desenvolve na UNL é apresentada, quer nos aspectos fundamentais quer nas aplicações em áreas típicas de aplicação (por exemplo, gestão de recursos), e ainda  em áreas menos tradicionais como a bioinformática estrutural.

 

MLKE - Aprendizagem Automática e Extração de Conhecimento

Docentes: Gabriel Pereira Lopes, Nuno Marques, Susana Nascimento, Joaquim Ferreira da Silva

Descrição: Este curso foca vários métodos na área de aprendizagem automática, mineração de dados e texto. Depois de uma apresentação tutorial de ambos os aspectos teóricos e práticos desses métodos, será dada especial atenção a problemas de investigação em aberto nesta área. Os temas de investigação abordados incluem redes neuronais (revê-se o modelo do perceptrão multi-camada para se abordar depois os mapas de Kohonen, métodos neuro-simbólicos e o recente "deep-learning"); extração de conhecimento a partir do texto, tradução automática, alinhamento de texto paralelo ao nível frásico, sub-frásico e sub-palavra, deteção de elementos relevantes no texto e suas aplicações, agrupamento e classificação de documentos, reconhecimento de padrões em texto. Será dada especial atenção à aplicação destes métodos a problemas no mundo real, com destaque para aqueles que cobrem a pesquisa realizada no NOVA LINCS e as suas aplicações na indústria.

Como pré-requisitos é recomendado conhecimento prévio em algumas destas áreas: aprendizagem automática, técnicas de mineração de dados e texto; métodos estatísticos e computacionais para processamento de dados e texto. Se solicitado, poderão ser fornecidos materiais introdutórios sobre este tópicos aos estudantes interessados.

 

KDD - Extração de Conhecimento de Dados

Docente: Susana Nascimento

Descrição: Esta unidade curricular centra-se no estudo de fundamentos e métodos de tópicos avançados para extração de informação relevante a partir de dados.

Os principais tópicos cobertos são: 

  • Regressão e classificação numa perspectiva de análise de dados estatística;
  • Métodos de agrupamento difuso para dados relacionais com ênfase em métodos emergentes de agrupamento espectral e técnicas de validação;
  • Outros métodos de aprendizagem relacional como árvores de decisão relacional e modelos gráficos relacionais;
  • Modelação de raciocínio preciso versus probabilístico cobrindo várias propostas de teoria da decisão Bayesiana e no estudo comparativo dos seus desempenhos na modelação de processos de tomada de decisão. 

Os vários tópicos são enquadrados com aplicações reais das actividades de investigação em curso, tais como: deteção automática de fenómenos oceanográficos a partir de imagens de satélite; modelação computacional de perfís a partir de ontologias; análise de redes sociais. 

Computação Gráfica e Multimédia

CGM - Modelação de Computação Gráfica

Docente: Fernando Birra

Descrição: O foco principal desta unidade curricular é o domínio da modelação orientada para a geração de imagens de síntese, tanto estáticas como dinâmicas (isto é, para animação por computador) e a diversos níveis de interação.

A matemática subjacente às principais técnicas de modelação está incluída no programa, nomeadamente astécnicas que dizem respeito à modelação de sólidos e à modelação baseada na física. Os modelos de objetos complexos desempenham um papel muito importante em diversas aplicações científicas, médicas e de engenharia, bem como no domínio do simples entretenimento. Além disso, áreas de investigação ativa também são referidas durante o curso. Exemplos: modelação de tecidos, representação de malhas e modelação da aparência, que são essenciais para a geração de imagens convincentes. 

 

WMS - Pesquisa de Dados Web e de Media

Docentes: Nuno Correia, João Magalhães

Descrição: A Pesquisa de Dados Web e de Media é uma área de investigação que procura responder necessidades dos utilizadores relativamente à pesquisa usando os dados atuais mais relevantes.

Esta unidade curricular começa por analisar um motor de pesquisa e discutir as técnicas fundamentais da pesquisa na web e de dados multimédia. Em seguida, são discutidos ao longo do semestre, os tópicos de investigação ativos mais relevantes: Ranking de dados com hiper-ligações, algoritmos de recomendação, filtragem colaborativa, anotação multimédia, gestão de comunidades e de perfil de utilizadores. 

Sistemas e Redes de Computadores

CSCS - Segurança de Sistemas e Comunicações

Docentes:  Henrique Domingos, Nuno Preguiça

Descrição: O objetivo da disciplina centra-se no estudo de tópicos avançados com estudo de soluções do estado da arte ou com relevância na investigação atual para Segurança, Confiabilidade e Privacidade de Sistemas Distribuídos e Redes de Computadores.

Abordam-se novos fundamentos, técnicas e tecnologias emergentes que visam o suporte de aplicações críticas para processamento e gestão de dados sensíveis em ambientes de computação globais. Estes ambientes envolvem desde dispositivos de computação móvel e ubíqua ou dispositivos de sensoriamento para computação permeada, à integração de plataformas de serviços de computação e armazenamento de dados, em nuvens de serviços de software.

A unidade curricular endereça o objetivo em torno de quatro tópicos principais: (i) Complementos de Criptografia Computacional Aplicada - compreendendo o estudo de novos algoritmos e mecanismos criptográficos especializados, com particular enfoque em técnicas e construções criptográficas para processamento com dados cifrados, anonimização de computações, bem como para protocolos de replicação de dados com garantias de tolerância a intrusões; (ii) Computação Confiável - envolvendo o estudo de novos fundamentos e técnicas para concepção de ambientes de computação com garantais de verificação e execução confiável com integridade e autenticidade de software; (iii) Segurança e Privacidade de Dados e Computações - visando o estudo de sistemas de processamento de dados com garantias implícitas de integridade e privacidade, com suporte para computações sobre dados cifrados, armazenados e processados na nuvem, e (iv) Segurança das Comunicações para a Internet das Coisas - abordando soluções da investigação para estabelecimento de canais seguros de comunicação e serviços confiáveis de encaminhamento de dados, particularmente vocacionados para eco-sistemas de dispositivos de sensoriamento e redes PAN, tendo em conta as restrições de computação, comunicação ou energia e tendo em vista a integração desses eco-sistemas em soluções seguras e utilizáveis da Internet das Coisas.

 

PGAC - Computação Paralela, Grid e Autonómica

Docentes: Vitor Duarte, Cecilia Gomes, Paulo Lopes

Descrição: As aplicações em larga escala, incluindo os grandes desafios computacionais (e-Science Grand Challenges), requerem cada vez mais a utilização de paralelismo, distribuição, e enormes volumes de dados. Estas aplicações são executadas em ambientes onde a incerteza, conhecimento parcial, imprevisibilidade, adversidade, e mudança (uma consequência da diversidade de plataformas - clusters / grids / clouds) estão muitas vezes presentes.

Esta disciplina estuda modelos e abordagens que permitem desenvolver e gerir sistemas e aplicações dinâmicas e adaptativas, apresentando um resumo do estado da arte e endereçando problemas em aberto e desafios de investigação actuais, relacionados com investigação em curso no DI/NOVALINCS.

Cobre três grandes subtemas, com um objectivo comum: o de explorar o paralelismo e a distribuição com vista à resolução de problemas complexos em sistemas computacionais com diferentes graus de heterogeneidade e comportamento dinâmico, tais como clusters, grids e clouds; tal objectivo é desenvolvido em três linhas, mas sob uma perspectiva unificada: (i) abstracções de altonível para a programação paralela; (ii) modelos de computação autonómica e adaptativa; (iii) gestão de recursos e dados distribuídos.

 

TS - Sistemas transaccionais

Docentes: João Lourenço, Nuno Preguiça

Descrição: Os mecanismos de processamento transacional são usado há muitos anos num grande número de sistemas, com realce para os sistemas de gestão de dados e mais recentemente como um mecanismo de

controlo de concorrência em máquina com múltiplos núcleos. O principal objetivo desta disciplina é estudar de forma detalhada o modelo transacional em sistemas de gestão de dados centralizados e istribuídos/replicados, assim como em sistemas de controlo de concorrência em máquinas com múltiplos núcleos.

Neste contexto, esta disciplina abordará o estado da arte da teoria e prática do desenho, implementação e avaliação de sistemas transacionais em em diferentes ambientes, desde sistemas em memória volátil e não volátil em máquinas com múltiplos núcleos até sistemas de cloud compostos por milhares de máquinas acedidas por milhões de dispositivos móveis.

 

HMCA - Ambientes Múlti-Núcleo Heterogéneos

Docentes: Pedro Medeiros, Hervé Paulino

Descrição: O curso endereça as mais recentes tendências na evolução das arquiteturas de múltiplos núcleos (many-core), com especial ênfase em Unidades de Processamento Gráfico (GPUs), fazendo uma análise geral dos paradigmas, ferramentas e ambientes de execução existentes para desenvolver aplicações dirigidas para esse tipo de arquiteturas.

Actualmente, placas ou chips com mais de 100 núcleos estão disponíveis e são utilizadas em configurações heterogéneas conjuntamente com CPUs convencionais; o tipo mais comum deste tipo de dispositivo é o GPGPU (Unidade Gráfica para uso Generalizado). Essas configurações de hardware heterogéneo são atraentes porque permitem alcançar um maior desempenho (cálculos por segundo) por unidade energética do que as alternativas baseadas em arquitecturas mais convencionais (com menos núcleos).

O curso está estruturado duas partes. Primeiro, aborda-se o estado da arte no desenho de CPUs, ou seja, as arquiteturas multi-núcleo tradicionais, e analisam-se várias arquiteturas de múltiplos núcleos, como os mais recentes GPUs da NVIDIA e da AMD, o Intel MIC e o AMD Fusion. Na segunda parte, discute-se como desenvolver programas para essas arquiteturas; cobrindo as propostas baseadas em abordagens tradicionais, como o MPI, OpenMP e Memória Partilhada Distribuída, e outrss mais recentes que tentam lidar com questões como a heterogeneidade e a gestão explícita da hierarquia de memória.

Linguagens e Modelos de Programação

PPL - Princípios de Linguagens de Programação

Docentes: Luís Caires, Carla Ferreira, João Seco

Descrição: As linguagens de programação estão entre os artefactos mais importantes e bem desenvolvidos das ciências da computação.

O estudo das linguagens de programação (LP) tem sido uma área muito ativa com diversas aplicações na engenharia de software, compilação, segurança, concorrência. Novas abstrações linguísticas continuam a ser propostas na atualidade, em conjunto com técnicas de análise associadas.

A UC tem duas partes. Na primeira, os alunos aprendem técnicas para definir formalmente a semântica de LPs, e para garantir a correção de programas usando sistemas de tipos (são cobertas linguagens funcionais, imperativas e concorrentes). Na segunda, os alunos conhecem aplicações de técnicas de LPs, com ênfase na concorrência, certificação, e segurança. A UC é recomendada para alunos interessados em desenvolver investigação na área das linguagens de programação.

Engenharia de Software

ASD - Desenvolvimento Avançado de Software 

Docentes: Vasco Amaral, João Araújo, Ana Moreira

Descrição: O principal objetivo da Engenharia de Software é minimizar a complexidade da construção, evolução e manutenção dos sistemas de software. Esta unidade curricular estuda três paradigmas avançados de desenvolvimento de software, cada um contribuindo para pelo menos um dos três grandes princípios da Engenharia de Software: modularização, abstração e reutilização.

Para endereçar problemas de modularização que as tecnologias clássicas de desenvolvimento, como por exemplo a orientada por objetos, não conseguem resolver, o desenvolvimento orientado por aspectos (Aspect-Oriented Software Development, ou AOSD) propõe conceitos, técnicas e soluções para a modularização de propriedades transversais cujas características não se alinham com os critérios da abordagem de decomposição dominante. Este módulo foca conceitos fundamentais, como aspectos, joinpoints, pointcuts e interações, e oferece métodos e ferramentas para identificar, especificar e compor aspectos num sistema de software.

Para melhorar a abstração, o  desenvolvimento orientado por modelos (Model-Driven Development, ou MDD) recomenda o uso sistemático de modelos e suas manipulações (ou transformações) como artefactos infra-estruturantes de modo a (re)criar software automaticamente. Este módulo cobre metamodelos, linguagens de metamodelação, como MOF (Meta-Object Facility) e Ecore, modelos independentes e específicos de plataformas, linguagens para domínios específicos, linguagens de transformação e ferramentas de apoio. 

Finalmente, o desenvolvimento por linhas de produtos (Software Product Lines, ou SPL) promove a reutilização planeada, em larga escala, através especificação de famílias de produtos cujas características comuns são reutilizadas e as características variáveis são configuráveis, possibilitando a geração rápida de novos produtos de software. Este módulo cobre conceitos da engenharia de domínio, modelos de features, gestão de variabilidade, programação generativa e fábricas de software.

 

ESE - Engenharia de Software Experimental

Docente: Miguel Goulão

Descrição: O principal objectivo desta unidade curricular é preparar os estudantes para realizar validações sólidas, com bases experimentais, de afirmações feitas em Engenharia de Software. A unidade curricular cobre os fundamentos da experimentação e medição e a sua combinação na construção de teorias em Engenharia de Software. As técnicas abordadas na unidade curricular são adequadas quer a projectos reais conduzidos em ambiente empresarial, quer a avaliações conduzidas em ambiente académico, de modo a que no final da mesma o estudante esteja em condições de planear, conduzir e reportar experiências em ambos os ambientes. O ênfase colocado na replicabilidade do trabalho experimental, incluindo no que concerne ao seu relato sistemático, contribui para a possibilidade de auditar e combinar resultados obtidos por equipas independentes, de forma a alimentar uma validação incremental de afirmações feitas no contexto de Engenharia de Software. Para além da condução de estudos primários, os estudantes aprendem também técnicas avançadas no planeamento, execução e reporte de estudos secundários em Engenharia de Software, como abordagem de consolidação de resultados experimentais obtidos de modo independente por diversas equipas de investigação, passo fundamental para a construção de um corpo de conhecimento sólido.