Computação 2 — Linguagem Java — 2021/1
Página principal
Informações
-
Local:
Google Meet (aulas em tempo real)
- Critérios de avaliação (cada item abaixo valendo 50% da nota final):
- trabalhos semanais, enunciados nas aulas das sextas-feiras;
- uma prova escrita.
PS.: os trabalhos deverão ser entregues até as 23:59 da terça-feira seguinte à aula do lab em questão,
via e-mail para vigusmao@dcc.ufrj.br, com o assunto no formato
"[Comp2_2021_1] LAB1" (sem as aspas, e com a numeração do lab de acordo: 1, 2, etc.);
- Data da prova: 08/10
- Repositório do código criado em sala de aula:
https://github.com/vigusmao/Comp2_2021_1
- Material de apoio:
Apostila da Caelum
- Programas necessários (a serem instalados):
- Java Development Kit (Java 8 ou acima)
- uma IDE para Java (recomendo fortemente o IntelliJ IDEA, da JetBrains)
Conteúdo das aulas
12/07
Introdução ao curso.
Semelhanças com a sintaxe de C. Declaração de variáveis e funções (métodos public static), loops, condicionais.
Saída para o terminal via System.out.println() e System.out.printf().
Entrada (leitura do teclado) chamando o nextLine() de um Scanner(System.in).
Primeiro programa: o nefasto Hello World.
Segundo programa: o problema dos armários.
Aula gravada no Google Meet.
14/07
Arrays. Políticas de crescimento aritmético vs geométrico. ArrayList.
O Garbage Collector do Java.
Atribuição de objetos (cópia de referências).
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
16/07
Noções de complexidade de algoritmos.
Comparando execuções de algoritmos O(n^2), O(n log n), O(n), O(n^0.5) e O(1) para um mesmo problema, o problema dos armários da aula passada.
Código feito em sala de aula no GitHub.
LAB 1.
Aula gravada no Google Meet.
19/07
Primeiras conversas sobre Orientação a Objeto. Classes. Objetos. Atributos e métodos. O método construtor. Modificadores de acesso public e private. Encapsulamento. Getters.
Cuidados ao se expor (via getter) um objeto que é atributo privado de uma classe: seu conteúdo pode vir a ser modificado externamente!
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
21/07
Resolução do LAB 1.
Comparando objetos com == e com o método equals().
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
23/07
Testes unitários (unit tests) com o JUnit.
LAB 2.
Aula gravada no Google Meet.
26/07
Pensando uma classe via Test-Driven Development (TDD).
Sobrecarga (overload) de métodos.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
28/07
Resolução do LAB 2.
Prosseguindo no projeto Fracao via TDD.
Lazy vs eager instantiation.
Override de métodos definidos em classes ancestrais. A anotação @Override. Customizando o método equals().
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
30/07
Fazendo override no toString() de uma classe nossa (no caso, a classe Fracao).
LAB 3.
Aula gravada no Google Meet.
02/08
Métodos auxiliares privados em classes de teste.
Herança. Declarando que uma classe extends uma outra.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
04/08
Modificadores private, package private (que é o default = sem modificador algum), protected, public.
A questão dos construtores default injetados automaticamente pelo compilador quando não se provê explicitamente um construtor.
A chamada ao construtor da superclasse (classe mãe) via super(...), que é injetada automaticamente na primeira linha do construtor se nós
não a escrevemos explicitamente (com a devida passagem de parâmetros, de acordo com o que pede o construtor da superclasse).
Fazendo override em métodos de classes ancestrais, e chamando, se desejado, aquele mesmo método na superclasse via super.nomeDoMetodo(...).
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
06/08
Resolução do LAB 3.
LAB 4.
Aula gravada no Google Meet.
09/08
Polimorfismo. Métodos e classes abstract. Os diferentes "pontos de vista".
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
11/08
Resolução do LAB 4.
Packages.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
13/08
LAB 5.
Aula gravada no Google Meet.
16/08
Noções preliminares de hashing. HashMap. HashSet.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
18/08
Resolução do LAB 5.
Aula gravada no Google Meet.
20/08
LAB 6.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
23/08
Lançando exceções com o throw e declarando-as na assinatura do método com o throws. Criando exceções customizadas.
Capturando exceções com o try...catch. Relançando exceções.
Testando exceções no JUnit.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
25/08
Aula gravada no Google Meet.
27/08
Aula gravada no Google Meet.
30/08
Aula gravada no Google Meet.
01/09
Aula gravada no Google Meet.
03/09
Resolução do LAB 7.
Ordenação. Interfaces Comparable e Comparator.
LAB 8.
Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.
08/09
Resolução do LAB 8.
Classes que implementam a interface Comparable. Ordenação "natural".
Exercícios: somando frações, fatorando um número, obtendo MMC...
Código feito em sala de aula no aqui e
aqui.
Aula gravada no Google Meet.
10/09
LAB 9.
Aula gravada no Google Meet.
13/09
Aula gravada no Google Meet.
15/09
Aula gravada no Google Meet.
17/09
LAB 10.
Aula gravada no Google Meet.
20/09
Enums: tipos enumeráveis.
Aula gravada no Google Meet.
22/09
Aula gravada no Google Meet.
24/09
LAB 11.
Aula gravada no Google Meet.
29/09
Resolução do LAB 11.
Lendo/escrevendo de/para arquivos.
Aula gravada no Google Meet.
01/10
LAB 12.
Aula gravada no Google Meet.
04/10
Recursão. Memoização.
Aula gravada no Google Meet.
06/10
Resolução do LAB 12.
Revisão para a prova.
Aula gravada no Google Meet.
08/10
Prova.