Plano de Estudos
Nesta secção apresentam-se os programas resumidos das disciplinas obrigatórias.
1º Semestre
Programação Funcional
- Linha: Programação
- Programa: Introdução ao paradigma funcional; tipos de dados; tipos de dados recursivos; funções recursivas; utilização de listas e árvores binárias; árvores binárias de pesquisa. (suporte: linguagem Haskell).
Álgebra Linear
- Linha: Álgebra e computabilidade
- Programa: Matrizes: operações com matrizes, inversa de uma matriz; transposição. Sistemas de equações lineares: o algoritmo de eliminação de Gauss, o algoritmo de Gauss-Jordan para inversão de matrizes; regra de Crammer. Espaços vectoriais reais e complexos: subespaços, dependência e independência lineares; base e dimensão. Transformações lineares: transformações lineares entre espaços vectoriais de dimensão finita, matriz de uma transformação linear, núcleo e imagem de uma transformação linear, nulidade e característica. Determinantes: propriedades; teorema de Lagrange. Valores e vectores próprios: valores e vectores próprios em espaços vectoriais de dimensão finita, subespaços próprios, diagonalização.
Matemática Computacional
- Linha: Análise, geometria e números
- Programa: Disciplina integradora de conteúdos de disciplinas do 1º ano
Tópicos de Matemática
- Linha: Lógica e Matemática Discreta
- Programa: Introdução ao cálculo proposicional: conectivos, fórmulas, valores de verdade, valorações, tautologias, equivalências lógicas. Representação de conjuntos, relações binárias, aplicações, famílias de conjuntos, relações de equivalência, conjuntos quociente. Conjuntos finitos e conjuntos infinitos, conjuntos numeráveis e conjuntos não numeráveis, teorema de Cantor. Princípio de indução e princípio de indução completa. Conjuntos parcialmente ordenados: elementos especiais, conjuntos bem ordenados, Lema de Zorn.
2º Semestre
Programação Imperativa
- Linha: Programação
- Programa: Introdução ao paradigma imperativo; representação de dados; estruturas de controlo; manuseamento de ficheiros; gestão dinãmica de memória; estruturas de dados lineares; pesquisa e ordenação: conceitos e algoritmos; tipos de dados abstractos: pilhas e filas de espera; estruturas de dados não lineares: árvores; árvores binárias de pesquisa. (suporte: linguagem C).
Teoria das Linguagens
- Linha: Álgebra e computabilidade
- Programa: Linguagens; expressões regulares e linguagens regulares; autómatos finitos deterministas e autómatos finitos não deterministas; equivalência entre os dois tipos de autómatos; teorema de Kleene; minimização de autómatos; lema da bombagem; gramáticas independentes do contexto; autómatos de pilha; correspondência entre gramáticas independentes de contexto e autómatos de pilha.
Cálculo
- Linha: Análise, geometria e números
- Programa: Axiomática do corpo dos números reais. Sucessões e séries numéricas, critérios de convergência. Continuidade de funções reais de variável real. Teoremas de Weierstrass e do Valor Intermédio. Função composta e função inversa. Derivabilidade, teoremas de Rolle, Lagrange e Cauchy, Regra de l'Hôpital. Funções hiperbólicas, hiperbólicas inversas e trigonométricas inversas. Primitivas imediatas, por partes, por substituição e primitivação de fracções racionais. Integral de uma função limitada num intervalo. Propriedades do integral. Teorema da mudança de variável. O Teorema Fundamental do Cálculo e algumas consequências.
Matemática Discreta
- Linha: Lógica e Matemática Discreta
- Programa: Noções básicas sobre grafos: caminhos, atalhos, componentes conexas. Grafos eulerianos e grafos hamiltonianos. Grafos planares, sua caracterização. Fórmula de Euler. Introdução à teoria de números: divisibilidade, números primos, máximo divisor comum e mínimo múltiplo comum, algoritmo de Euclides, teorema fundamental da aritmética. Equações diofantinas, congruências, o anel Zn, teorema chinês dos restos. Função e fórmula de Euler, teorema de Wilson.
Arquitectura de Computadores
- Linha: Tecnologias da computação
- Programa: Organização e estrutura de um computador; representação de informação; arquitecura ao nível do conjunto de instruções; avaliação de desempenho de computadores.
3º Semestre
Comunicações por Computador
- Linha: Tecnologias de computação
- Programa: Transmissão e comunicação de dados; protocolos de comunicações; famílias de protocolos e suas arquitecturas; redes locais de computadores; protocolos TCP/IP.
Estruturas Algébricas
- Linha: Álgebra e computabilidade
- Programa: Grupos: subgrupos e subgrupos invariantes, Teorema de Lagrange, grupos quociente, homomorfismos. Anéis: subaneis, ideais, anel quociente, homomorfismos; domínios de integridade; corpos. Reticulados: subreticulados, homomorfismos e produto directo; relações de congruência e reticulados quociente. Reticulados distributivos e reticulados modulares. Álgebras de Boole. Conceitos básicos em algebra universal: operação de aridade n, álgebras; subálgebras, homomorfismos e produto directo; subálgebra gerada; relações de congruência e álgebra quociente.
Algoritmos e Complexidade
- Linha: Programação
- Programa: Introdução à análise de algoritmos: análise de correcção; análise assimptótica de tempo de execução; Notações O, Ω e Θ. relações de recorrência; estratégias algorítmicas fundamentais. Algoritmos de ordenação. Algoritmos clássicos sobre grafos. Definição informal das classes de problemas P e NP; exemplos de problemas NP-completos. Estruturas de dados: árvores AVL e tabelas de "hash". (suporte: linguagem C).
Análise
- Linha: Análise, geometria e números
- Programa: Produto interno, norma e distância. Conjuntos abertos, fechados, limitados, compactos e conexos por arcos. Sucessões e séries em R^n. Funções de R^n em R^m, limites e continuidade, continuidade de funções compostas. Noção de derivada direccional, derivada parcial. Generalização do Teorema de Lagrange para funções reais de várias variáveis. Derivada (global). Derivadas de ordem superior. Derivada da função composta. Hiperplano tangente ao gráfico de uma função num ponto onde a função é derivável. Recta normal e hiperplano tangente a uma curva de nível. Máximos e mínimos locais e condicionados. Teorema da Função Inversa e Teorema da Função Implícita. Breve introdução à definição de integral de uma função definida num rectângulo. Extensão do conceito de integral a outros conjuntos.Teorema de Fubini. Teorema da mudança de variável. Coordenadas polares, cilíndricas e esféricas.
Lógica
- Linha: Lógica e Matemática Discreta
- Programa: Sintaxe e semântica da Lógica Clássica Proposicional; formas normais conjuntivas e disjuntivas; sistema formal de dedução natural; teoremas da correcção e completude. Sintaxe, semântica de Tarski e dedução natural para a Lógica Clássica de Primeira Ordem. Introdução à Lógica Intuicionista Proposicional: semântica de Kripke; dedução natural; interpretação de Godel em Lógica Clássica.
4º Semestre
Programação Orientada aos Objectos
- Linha: Programação
- Programa: Introdução à Programação por Objectos: origem do paradigma e conceitos básicos fundamentais.
Noção de Objecto em PPO: estrutura e comportamento, encapsulamento, mensagens e métodos, instâncias e classes.
Classes, Hierarquias de Classes e Herança: herança lógica vs herança de implementação, herança vs agregação.
Classes Abstractas: reutilização e extensibilidade, tipos abstractos de dados, polimorfismo.
Concepções de sistemas em PPO: subclasses como especialização, tipos de dados estáticos e dinâmicos.
Programação por Objectos utilizando Java: modelo de programação em Java, estudo das principais bibliotecas, "static checking" vs "runtime checking".
Cálculo de Programas
- Linha: Álgebra e computabilidade
- Programa: Arquitectura da programação: teoria e método. Composicionalidade. Programação funcional composicional, seus combinadores e suas leis de cálculo. Programação funcional com mónadas e o seu cálculo. Estruturas de dados indutivas regulares e sua álgebra de programação. Programação genérica: parametrização e polimorfismo. Costumização e reutilização.
Processamento de Linguagens e Compiladores
- Linha: Programação
- Programa: Análise e geração automática de programas; gramáticas independentes do contexto; "parsing" top down e bottom-up; programação baseada em gramáticas de atributos.
Lógica Computacional
- Linha: Lógica e Matemática Discreta
- Programa: Lógicas Modais; Lógica Linear; Sistemas dedutivos; tableaux; Sistemas dedutivos optimizados para o calculo proposicional. Programação lógica.
Sistemas Operativos
- Linha: Tecnologias da computação
- Programa: Objectivos, evolução e estrutura dos sistemas operativos modernos; gestão de processos (objectivos, critérios e estratégias de escalonamento); gestão de memória (memória real e virtual, paginação e segmentação); gestão de periféricos ("software" de I/O, gestão de disco, "device drivers"); sistemas de ficheiros.
5º Semestre
Computabilidade
- Linha: Álgebra e computabilidade
- Programa: Máquinas de Turing; linguagens recursivas e recursivamente enumeráveis; máquinas de Turing universais; problemas de decisão; problemas (in)decidíveis e problemas semi-decidíveis; problemas de decisão em teoria da computabilidade: problema da auto-rejeição, problema da aceitação e problema da paragem, teorema de Rice; reduções entre problemas; funções computáveis por máquinas de Turing, funções parciais recursivas e equivalência entre as duas classes de funções; Tese de Church. Introdução à Teoria da Complexidade; classes P e NP; completude NP; teorema de Cook e outros exemplos de problemas completos para NP.
Análise Numérica
- Linha: Análise, geometria e números
- Programa: Erros e estabilidade. Interpolação polinomial. Quadratura: fórmulas de Newton-Cotes. Equações não lineares. Sistemas de equações lineares: métodos directos. Utilização de um sistema computacional na programação de métodos estudados.
Geometria
- Linha: Análise, geometria e números
- Programa: Estrutura euclidiana de R^2 e R^3: rectas, planos, sistemas de referência, produto interno e distância, paralelismo e perpendicularidade. Transformações geométricas de R^2 e R^3: isometrias no plano e no espaço; semelhanças e inversões no plano. Geometria projectiva: coordenadas homogéneas, perspectivas, projecções paralelas. Curvas e superfícies: parametrizações de curvas e superfícies; coordenadas polares e esféricas.
Bases de Dados
- Linha: Tecnologias da computação
- Programa: Terminologia de sistemas de bases de dados; análise, planeamento e concepção se sistemas de bases de dados; manipulação de dados; sistemas de bd distribuídas e centralizadas.
Programação Concorrente
- Linha: Programação
- Programa: Modelação de sistemas concorrentes: processos, estados, acções, escolha, não determinismo, guardas, propriedades de segurança e progresso; Concorrência em memória partilhada: exclusão mútua, "deadlocks", semáforos, monitores (tipos abstractos de dados concorrentes, variáveis de condição, espera e semânticas de sinalização, invariantes e predicados, concorrência em linguagens orientadas a objectos); Concorrência em sistemas distribuídos: canais e portos, "send" e "receive", "unicast" e "broadcast", modelos síncronos e assíncronos, modelo cliente-servidor, faltas em processos e canais, semântica perante faltas, tempo, ordem e causalidade.
6º Semestre
Processos e Concorrência
- Linha: Álgebra e computabilidade
- Programa: Álgebras dos processos concorrentes; lógicas temporais, especificação e verificação de sistemas reactivos; ferramentas computacionais.
Semântica da Programação
- Linha: Lógica e Matemática Discreta
- Programa: O λ-calculus: sintaxe, redução, avaliação (ordens normal e aplicativa). Estudo de uma linguagem de programação funcional elementar: semântica operacional e semântica denotacional. Introdução à teoria de domínios: funções contínuas e menores pontos fixos. Semântica de funções recursivas. O sistema de tipos simples: tipos implícitos e explícitos; inferência de tipos.
Teoria dos Números Computacional
- Linha: Análise, geometria e números
- Programa: Raízes primitivas e índices, aplicação ao estudo de alguns tipos de congruências. Distribuição dos números primos, teorema dos números primos. Testes de primalidade e de pseudo-primalidade. Algoritmos para gerar números primos. Código RSA. Resíduos quadráticos, lei da reciprocidade quadrática. Fracções racionais, equações de Pell. Algoritmos de factorização (Fermat, Pollard, via fracções contínuas, etc.). Representação de inteiros como soma de quadrados. Inteiros e primos gaussianos.
Teoria das Probabilidades
- Linha: Análise, geometria e números
- Programa: Introdução e conceitos básicos. Teoria axiomática. Variáveis aleatórias, vectores aleatórios e distribuições de probabilidade (discretas, absolutamente contínuas e outras). Medidas de localização, dispersão e forma. Momentos, desigualdades e transformadas. Famílias de distribuições univariadas e multivariadas mais comuns. Funções de variáveis aleatórias. O modelo normal e suas propriedades. Distribuições por amostragem em modelos normais. Convergências estocásticas. Teorema Limite Central e leis dos grandes números.
Computação Gráfica
- Linha: Tecnologias da computação
- Programa: Estudo das primitivas gráficas; transformações geométricas (escala, rotação e translação); cores e texturas; iluminação; som e filmes; retoques finais; introdução de técnicas para melhorar a performance; ligações; análise do modelo de eventos; sensores; interpoladores: animação básica; encaminhamento de eventos; técnicas avançadas para melhorar o desempenho; protótipos.
7º Semestre
Teoria das Categorias
- Linha: Álgebra e computabilidade
- Programa: Construções básicas: categorias, diagramas, morfismos, objectos iniciais e finais, construções universais, limites e co-limites. Functores, transformações naturais e adjunções.
8º Semestre
Métodos Formais de Programação I
- Linha: Álgebra e computabilidade
- Programa: A especificação formal como método de controlo de qualidade. Ciclo de vida do desenvolvimento formal de uma aplicação. Binómio especificação/implementação. Prototipagem e animação. Standards e ferramentas. Papel da abstracção na modelação de problemas. Tipos colectivos de dados e seu papel na modelação de sistemas de informação. Raciocínio e verificação de propriedades. Invariantes e obrigações de prova. O cálculo relacional e sua aplicação à síntese de programas.