Planificação
Calendário
Esta planificação serve para dar uma ideia resumida das aulas planeadas e/ou dadas:
- Teóricas:
- (T01) 12/02: Apresentação da UC; Introdução ao Java I
- (T02) 15/02: Introdução ao Java II
- (T03) 19/02: Introdução ao Java III
- (T04) 26/02: Introdução ao Java IV
- (T05) 01/03: Introdução ao Java V
- (T06) 08/03: Tipos Abstratos de Dados I
- (T07) 12/03: Tipos Abstratos de Dados II
- (T08) 15/03: Tipos Abstratos de Dados III
- (T09) 19/03: Listas Ligadas, Pilhas e Filas I
- (T10) 22/03: Listas Ligadas, Pilhas e Filas II
- (T11) 26/03: Listas Ligadas, Pilhas e Filas III
- (T12) 29/03: Listas Ligadas, Pilhas e Filas IV
- (---) 02/04: Final Mundial ICPC
- (---) 05/04: Final Mundial ICPC
- (T13) 09/04: Complexidade Algorítmica I
- (T14) 12/04: Complexidade Algorítmica II
- (...)
- Práticas laboratoriais previstas:
- (PL01) 14/02 a 20/02: Introdução ao Java
- (PL02) 25/02 a 01/03: Input/Output e Mooshak
- (PL03) 04/03 a 08/03: Introdução a Classes
- (PL04) 11/03 a 15/03: Programação Estruturada
- (PL05) 18/03 a 22/03: Tipos Abstractos de Dados
- (PL06) 25/03 a 30/03: Listas Ligadas
- (PL07) 08/04 a 12/04: Listas, Pilhas e Filas
- (...)
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.
...