Planificação

Calendário

Esta planificação serve para dar uma ideia resumida das aulas planeadas e/ou dadas:

Sumários

Aula Teórica #01: 12/02/2019
Apresentação da unidade curricular: docentes, frequência, avaliação, objectivos, programa, funcionamento das aulas, bibliografia. História da linguagem Java.
Slides: 0 - Apresentação e Programa (todos) ; 1 - Introdução ao Java (1 a 5)

Aula Teórica #02: 15/02/2019
Caracterísicas principais do Java; portabilidade; JDK; modelo de programação e um primeiro programa em Java; comentários; tipos de dados primitivos e seus limites máximos; conversões implicitas e "castings"; âmbitos das variáveis; principais operadores e regras de precedência; divisão inteira e resto.
Slides: 1 - Introdução ao Java (6 a 19)

Aula Teórica #03: 19/02/2019
Operadores de incremento/decremento e modifica-e-atribui; instruções condicionais: if-else e switch; instruções de ciclo: while, do-while, for, break e continue; classes e terminologia associada: referências, objectos, atributos e métodos; operadores "new" e "ponto"; um primeiro exemplo de classe: coordenada 2D; métodos construtores; overload de métodos; comparação de objectos.
Slides: 1 - Introdução ao Java (20 a 35)

Aula Teórica #04: 26/02/2019
Variáveis e métodos estáticos; API do Java; packages java.lang e java.util; strings; arrays e matrizes.
Slides: 1 - Introdução ao Java (36 a 50)

Aula Teórica #05: 01/03/2019
Input/Output em Java; entrada, saída e erro padrão; classe Scanner, construtores e outros métodos associados; escrita formatada; regras de etiqueta e convenções; metodologias de resolução de problemas
Slides: 1 - Introdução ao Java (51 a 64)

Aula Teórica #06: 08/03/2019
Princípios de programação orientada a objectos: abstração, encapsulamento e modularidade; tipos abstractos de dados (TADs); TAD Vector: atributos, construtores e outros métodos associados para operações comuns; palavra chave "this"; qualificados de âmbito: "private", "protected" e "public"; o método toString() e noção override de métodos.
Slides: 3 - Tipos Abstractos de Dados (1 a 14)

Aula Teórica #07: 12/03/2019
TAD Conjunto, sua API e possívels aplicações; conceito de interface; definição um interface para um conjunto de inteiros; implementação de conjuntos usando arrrays e suas vantagens e desvantagens em termos de tempo de execução e memória.
Slides: 3 - Tipos Abstractos de Dados (15 a 28)

Aula Teórica #08: 15/03/2019
Geração de excepções e uso da palavra-chave throw; uso de um array de booleanos para representar conjuntos e suas vantagens e desvantagens; Interface Set da API do Java e algumas das suas implementações possíveis; conceito de genéricos; implementação de um par genérico; noção de wrappers, autoboxing e autounboxing; mecanismo de herança em programação orientada a objectos, conceitos associados e sua implementação em Java.
Slides: 3 - Tipos Abstractos de Dados (29 a 46)

Aula Teórica #09: 19/03/2019
Estruturas de dados sequenciais; conceito de listas ligadas: vantagens e desvantagens; conceito de tipos genéricos; implementação de listas ligadas genéricas em Java com "live coding";
Slides: 4 - Listas Ligadas, Pilhas e Filas (1 a 17)

Aula Teórica #10: 22/03/2019
Breve análise e discussão do teste prático I de 20 de Março; continuação da implementação das listas ligadas genéricas em Java.
Slides: 4 - Listas Ligadas, Pilhas e Filas (9 a 17)

Aula Teórica #11: 26/03/2019
Listas ligadas circulares: implementação e aplicações; listas duplamente ligadas: implementação e aplicações; conceito de sentinelas.
Slides: 4 - Listas Ligadas, Pilhas e Filas (18 a 35)

Aula Teórica #12: 29/03/2019
Conceito, implementação e aplicações de pilhas (LIFO), filas (FIFO) e deques ("double ended queues"); classes da API do Java para pilhas, filas e deques; conceito de iteradores e instrução foreach.
Slides: 4 - Listas Ligadas, Pilhas e Filas (36 a 51)

Aula Teórica #13: 09/04/2019
Conceito de algoritmo e suas propriedades: correção e eficiência; o problema do caixeiro viajante: algumas heurísticas possíveis (não ótimas) e solução ótima com pesquisa exaustiva; verifação empírica de tempo de execução da geração de permutações; o modelo RAM para análise de algoritmos; exempl de contagem de operações num programa simples.
Slides: 4 - Complexidade Algorítmica (1 a 22)

Aula Teórica #14: 12/04/2019
Análise do pior caso e do caso médio de um algoritmo; conceitos fundamentais de análise assintótica; notação big Oh (O, Ω e Θ); noções de crescimento assintótico e das funções mais habituais de complexidade; comparação visual de funções usando o gnuplot; previsão do tempo de exeução de um algoritmo.
Slides: 4 - Complexidade Algorítmica (23 a 38)

...


Aula Prática #01: 14/02 a 20/02
Um primeiro programa em Java; ciclos, instruções condicionais, procedimentos e funções; arrays e crivo de Eratóstenes; strings.

Aula Prática #02: 25/02 a 01/03
Classe Scanner e leitura de input; uso de arrays; plataforma Mooshak para avaliação automática de código; classes String e Character; resolução de problemas.

Aula Prática #03: 04/03 a 08/03
Uso de classes em Java: métodos, atributos, construtores; referências e conceito de null; atributos e métodos estáticos; classes para representar objectos geométricos simples: pontos e retângulos; classe para representar uma matriz.

Aula Prática #04: 03/02 a 01/03
Noções de programação estruturada; resolução de problemas: implementação de um verificador para um jogo do galo genérico, implementação do jogo da vida, implementação de um verificador de sopa de letras.

Aula Prática #05: 18/03 a 22/03
Tipos Abstractos de Dados, interfaces e suas implementações; implementação de conjuntos de números inteiros usando um array como lista e um array de booleanos como "dicionário" e métodos associados; implementação de números arbitratriamente grandes.

Aula Prática #06: 25/03 a 30/03
Exploração da implementação de listas ligadas dada nas aulas teóricas; resolução de problemas com implementação de vários métodos sobre listas ligadas.

Aula Prática #07: 08/04 a 12/04
Exploração da implementações de listas circulares, listas duplamente ligadas, pilhas, filas e deques dadas nas aulas; resolução de problemas usando os conceitos de listas, pilhas, filas e deques.

...