Computação 2  —   Linguagem Java   —  2020/2

Página principal

Informações


Conteúdo das aulas

24/03


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.  
 

26/03


Diversas maneiras distintas de se resolver o problema dos armários da aula passada.
Primeiras noções de complexidade de algoritmos. Medindo tempos de execução em Java.
Comparando algoritmos O(n^2), O(n log n), O(n), O(sqrt n) e O(1) para um memso problema.

LAB 1.

Aula gravada no Google Meet.  
 

29/03


Primeiras noções de Orientação a Objeto. Encapsulamento.
Criando uma classe. Atributos e métodos. Modificadores public e private.
Getters e setters. Construtores.
Inner classes.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

31/03


Resolução do LAB1.

Discussão sobre políticas de crescimento de arrays (P.A. versus P.G.) e implementação de uma classe nossa que deixe transparente esse crescimento sob demanda: ArrayComRodinhas.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

05/04


Continuando a resolução do LAB1 (primos, agora via crivo de Eratóstenes).

Modificadores static e final. Mais sobre a filosofia do encapsulamento.
Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

07/04


Unit tests. Unit tests em Java com o JUnit. @Test, @Before. Asserts.
Test-Driven Development (TDD).

Finalmente usando ArrayList ao invés de arrays MinhaClasse[].

Extra: aqui uma referência sobre como capturar o separador decimal do sistema operacional (fiz um último commit no código de hoje, após a aula).

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

09/04


Comparando objetos com == e com o método equals().
O método toString()

LAB 2.

Aula gravada no Google Meet.  
 

12/04


Override (e o porquê de se usar a anotação @Override) versus Overload (sobrecarga). Sobrecarga como forma de atribuir valores default a parâmetros. Sobrecarga de construtores.

Herança: estendendo uma classe. O modificador de acesso protected.

Memoização (como forma de evitar a criação de múltiplos objetos para representar o mesmo objeto semântico).

Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.  
 

14/04


Resolução do LAB 2.
Memoização com lazy instantiation.

Polimorfismo.

Código feito em sala de aula no GitHub.
Aula gravada no Google Meet.  
 

16/04


LAB 3. (Desta vez o prazo para entrega fica sendo até quinta-feira, dia 22/04, às 23:59, em função do feriado na quarta-feira dia 21.)

Aula gravada no Google Meet.  
 

19/04


Classes e métodos abstract.
Regra geral: declarando um objeto como sendo da classe mais acima possível na hierarquia (e que seja suficiente para o uso pretendido).

Estendendo uma classe singleton apenas para testes.

Código feito em sala de aula aqui (abstract) e aqui (testes com singletons).
Aula gravada no Google Meet.  
 

26/04


Resolução do LAB 3.

Atributos que não são de um objeto, mas de um par de objetos. Exemplos: preço de um produto em determinada loja, quantidade quantidade de um produto no estoque de determinada loja. Motivando o uso de mapas. Implementação inicial: listas paralelas.

Aula gravada no Google Meet.  
 

28/04


Map. HashMap.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

30/04


LAB 4.

Aula gravada no Google Meet.  
 

03/05


Interfaces. Interfaces versus classes abstratas.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

05/05


Resolução do LAB 4.

Implementando hashCode() para usar objetos nossos como chaves de estruturas baseadas em hashing. O contrato do hashCode() e do equals().

Aula gravada no Google Meet.  
 

07/05


Ordenando listas com sort(Comparator) ou Collections.sort(). As interfaces Comparator e Comparable.
Busca binária (em listas ordenadas) com Collections.binarySearch().

LAB 5.

Aula gravada no Google Meet.  
 

10/05


Tipos genéricos. O diamond <>. Restringindo tipos genéricos via <T extends Classe & Interface1 & Interface2 & ...>.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

12/05


Revisão de muitos conceitos. Projeto Álbum de Figurinhas virtual.

Aula gravada no Google Meet.  
 

14/05


LAB 6.

Aula gravada no Google Meet.  
 

17/05


Resolução do LAB 5.

Aula gravada no Google Meet.  
 

19/05


Revisão dos tópicos vistos até aqui, associando com os respectivos capítulos da apostila da Caelum.
O design pattern da Object Factory.
Packages: organização, encapsulamento, testes específicos por módulo, possbilidade de se ter classes com o mesmo nome (mas em packages distintos).

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

21/05


Resolução do LAB 6 em dois commits: aqui e aqui.

LAB 7.

Aula gravada no Google Meet.  
 

24/05


Regular expressions.
Os métodos String.split() e String.matches().

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

26/05


Exceções. Lançando com o throw. Checked vs Runtime exceptions. Declarando checked exceptions na assinatura do método com o throws. Capturando exceções via try...catch.
Criando nossas próprias classes de exceções.
Escrevendo unit tests para verificar se as exceções estão sendo lançadas corretamente.

Código feito em sala de aula no GitHub.

Aula gravada no Google Meet.  
 

28/05


Usando try...finally e try...catch...finally.

Resolução do LAB 7 e enunciado do LAB 8: aqui.

Aula gravada no Google Meet.  
 

02/06


Resolução do LAB 8.

Lendo/escrevendo em arquivos. Scanner, FileReader, BufferedReader, FileWriter, BufferedWriter.
Código feito em sala de aula aqui e aqui.

Aula gravada no Google Meet.

Voltar ao topo