Computação 2  —   Linguagem Java   —  2019/1

Página principal

Informações


Conteúdo das aulas

De 11/03 a 22/03


Aulas dadas pelo professor Judismar Arpini. Repositório.

Introdução ao curso. Explicações breves sobre Java, linguagens compiladas/interpretadas.
Sintaxe parecida com C.
I/O básico com a classe System: lendo do standard in (teclado) via Scanner e escrevendo no standard out (terminal).
Tratamento de exceções.  
 

25/03


Laboratório 2.
Primeiros conceitos de orientação a objeto. Classe. Objeto. Atributos e métodos. Construtor. Overload/Override.
Código feito em sala de aula no GitHub.  
 

27/03


Modificadores de visibilidade public e private. Getters e setters. Setters com validação de parâmetros e triggers para manter consistência do objeto. Métodos static.
Código feito em sala de aula no GitHub.  
 

29/03


Lazy instantiation. Atributos static. Atributos final.
O DRY principle (Don't Repeat Yourself). Um construtor chamando outro construtor (sobrecarga) via this(...<parâmetros>...).
Passagem de parâmetros default para métodos via overload (sobrecarga). Exemplo: Aritmetica.calcularRaiz(...).
Código feito em sala de aula no GitHub.  
 

01/04


LAB 3.  
 

03/04


Herança (introdução).
Fazendo @Override de métodos para customizar o comportamento que já havia sido definido na super classe.

O construtor default (sem parâmetros) e o super() que é automaticamente chamado (forçando a execução do construtor default da superclasse) quando você não chama explicitamente o construtor da superclasse via super(...<parâmetros>...).

Código feito em sala de aula no GitHub.  
 

05/04


Polimorfismo. A questão dos pontos de vista do chamador e do executor.
A anotação @Override.
Forçando a execução de método da superclasse a partir do override do método na subclasse via super.metodoDesejado(...<parâmetros>...).

Código feito em sala de aula no GitHub.  
 

08/04


LAB 4.  
 

12/04


Métodos e classes abstract.

Código feito em sala de aula aqui (continuação do exercício do LAB4 acrescentando métodos abstratos) e aqui.  
 

15/04


LAB 5.

Diferença entre == (comparação entre primitivos, ou entre referências) e o método equals (comparação semântica entre objetos).  
 

17/04


Resolução em sala dos exercícios do LAB 5. Mais sobre classes e métodos abstratos. Conversa inicial sobre unit tests.  
 

24/04


Unit tests com JUnit. @Test, @Before. As boas práticas: regra de negócio escrita como msg a ser exibida em caso de falha, ver primeiro o teste falhando, indicar o cenário do teste no próprio nome do método, usar o assert específico.

Código feito em sala aqui e aqui.  
 

26/04


Test-Driven Development (TDD).
Código feito em sala no GitHub.  
 

29/04


LAB 6.
Código feito em sala no GitHub.  
 

03/05


Resolução do LAB 6.
Como escrever unit tests para exceções.
Problema conceitual proposto: como adaptar o código para poder colecionar não apenas Figurinhas, mas também, digamos, Selos?
Código feito em sala no GitHub.  
 

06/05


LAB 7.
Duas soluções (ruins) para o problema conceitual da aula passada.
1) Sublclasses AlbumFigurinha e AlbumSelo.
2) Superclasse Colecionavel para Figurinha e Selo.

Código feito em sala no GitHub.  
 

08/05


Usando interface.
Código feito em sala no GitHub.  
 

10/05


Generic types.
Código feito em sala no GitHub.  
 

13/05


LAB 8.  
 

17/05


Revisão para a P1.
Solução do LAB 8.  
 

20/05


LAB 9 com o Professor Judismar Arpini.
Treino para a P1: a P1 do período anterior.  
 

22/05


P1.  
 

24/05


Resolução da P1 em sala de aula com o Professor Judismar Arpini.  
 

27/05


LAB 10.
Código da P1 revisitado na prática. Cobertura de testes para a classe GuiaTuristico.  
 

29/05


Packages. O package java.util. A interface List. A classe ArrayList.

A complexidade de tempo e espaço de se utilizar arrays subjacentes com crescimento em P.A. ou P.G. Vimos que o crescimento em P.G. (por exemplo, dobrando-se o tamanho do array a cada vez que se tiver necessidade de mais espaço) leva a tempo O(n) para se inserir n elementos; por outro lado, o crescimento em P.A. leva tempo quadrático O(n2).

Código feito em sala de aula no GitHub.  
 

31/05


Mais do package java.util. A interface Set. A classe HashSet.
Noções preliminares de complexidade de algoritmos. Medindo tempo com System.currentTimeMillis().

Sorteando um inteiro com o método nextInt() de um objeto Random. Forçando-se a seed de um objeto Random.

O problema da interseção de listas. Três maneiras de resolvê-lo: a maneira ingênua; a maneira em que se ordena uma das listas para permitir busca binária; e a maneira usando-se um HashSet auxiliar. Análise de complexidade, observando as complexidades O(n^2), O(n log n) e O(n) dos algoritmos vistos, respectivamente.
Código comparativo feito em sala de aula no GitHub.  
 

03/06


LAB 11.  
 

05/06


A interface Map. A classe HashMap.
Código feito em sala de aula no GitHub.  
 

07/06


Aula dada pelo professor Judismar Arpini.
Strings. StringBuffer / StringBuilder.  
 

10/06


LAB 12.  
 

12/06


StringBuilder vs concatenação direta em Strings. Commit feito em sala de aula no GitHub.

Inner classes.
Usando mapas em problemas que aparentemente não os demandariam. O problema do contador de ocorrências.
Testes de performance fora dos unit tests.
Código feito em sala de aula no GitHub.  
 

17/06


LAB 13.  
 

19/06


O contrato do equals() com o hashCode().
Usando o enum (tipos enumeráveis) em Java.
Código feito em sala de aula no GitHub.  
 

24/06


Static initializers. Veja o exemplo no enum Dinheiro aqui.

Exercícios do dia: LAB 14.  
 

26/06


P2.

Voltar ao topo