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

Página principal

Informações


Conteúdo das aulas

24/08


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.
Primeiro programa: o nefasto Hello World.
Saída para o terminal via System.out.println().
Entrada (leitura do teclado) chamando o nextLine() de um Scanner(System.in).
Conversa inicial sobre Orientação a Objeto. Classe vs struct. O racional do encapsulamento. Modificadores private e public. Accessor methods (getters e setters).
Conversa rápida sobre Unit Tests e Test-Driven Development.

Código feito em aula no GitHub.

26/08


Instanciando objetos. Construtores. Atributos final.
Valores default para tipos primitivos. O null para objetos não-inicializados.
Atributos calculados, com acesso somente de leitura.

Código feito em aula no GitHub.
Aula gravada no Drive.

28/08


Arrays. A classe Object (ancestral comum de todas as classes). O método toString().
Unit tests e TDD com o JUnit. Usando asserts. A boa prática de se ver primeiro os testes falhando.

Código feito em aula no GitHub.
Aula gravada no Drive.

31/08


Objetos com referências para objetos. Passando o
this
como parâmetro.
O "DRY principle" (Don't Repeat Yourself).
Debugging com Step Into (F7) e Step Over (F8).
Vendo o histórico de commits no GitHub e o diff relacionado a um commit.

Código feito em aula no GitHub.
Aula gravada no Drive.

02/09


Classes de teste com atributos, método setUp (anotado @Before) e extração de métodos privados com trechos de código comuns.
Modelagem de um mini-sistema bancário, com suas principais classes e relacionamentos.
Agregação versus composição.

Código feito em aula no GitHub.
Aula gravada no Drive.

04/09


LAB 1. (Não precisa entregar trabalho.)


Código feito em aula no GitHub.
Aula gravada no Drive.

09/09


Redimensionamento de arrays em progressão geométrica. Por que é tipicamente desconfortável trabalhar com arrays diretamente?
Criação de uma classe Lista, entendendo as dores de implementação e as soluções fornecidas pela classe java.util.ArrayList.

O conceito de overload (sobrecarga).

O problema do type cast (runtime exception).

Código feito em aula no GitHub.
Aula gravada no Drive.

11/09


LAB 2. (Trabalho a ser entregue até domingo, 13/09, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

Comparação (semântica) de objetos: equals() vs ==.

Código feito em aula no GitHub.
Aula gravada no Drive.

14/09


Resolução dos exercícios do LAB 2.
Métodos e atributos static.

Código feito em aula no GitHub.
Aula gravada no Drive.

16/09


Tipos genéricos.
Usando (com vantagem!) java.util.ArrayList ao invés de arrays de objetos.

Código feito em aula no GitHub.
Atenção especial à classe Lista, onde usamos tipos genéricos pela primeira vez no curso.
Aula gravada no Drive.

18/09


LAB 3. (Trabalho a ser entregue até domingo, 13/09, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

A classe java.util.Random e a geração de valores pseudoaleatórios.
Iterando com for...each.

Código feito em aula no GitHub.
Aula gravada no Drive.

21/09


Correção do LAB 3.

Arrays:
- podem ser usados com tipos primitivos ou objetos;
- não precisam ser inicializados para que todas as suas posições (entre 0 e seu length - 1) estejam acessíveis para leitura e escrita;
- comportam no máximo a quantidade de elementos para a qual foram dimensionados; se precisar de mais espaço será preciso criar outro array e copiar tudo;
- não te permitem saber quantos elementos já foram de fato escritos no array; é preciso controlar com variável externa, ou usar algum tipo de esquema do tipo "o primeiro null encontrado indica que não há mais nenhuma posição ocupada a partir dali";
- para efetuar uma remoção física de elemento, sem deixar um "buraco" (preenchido com null ou outra coisa qualquer) na posição que continha o elemento removido, é necessário mover explicitamente todos os elementos à direita daquela posição um passo para a esquerda.

ArrayLists:
- armazenam apenas objetos, não tipos primitivos;
- aceitam add() de quantos elementos se desejar, sem que precisem ser pré-alocados (o redimensionamento ocorre transparentemente ao usuário do ArrayList);
- possuem um método size(), que retorna a quantidade exata de elementos adicionados ao ArrayList, sem necessidade de se controlar isso por variável externa;
- fazem remoção física de forma totalmente transparente para o usuário, isto é, o usuário jamais precisará se preocupar com o "shift left";
- não permitem acesso a uma posição com índice maior ou igual ao size() lógico do ArrayList; se isso for necessário, pode-se inicializar o ArrayList com a quantidade desejada de nulls;
- fornecem uma grande quantidade de métodos convenientes para cópia, concatenação, localização de objeto no ArrayList, etc.

Uma boa referência é esse artigo no geeksforgeeks.

Sobrecarga (overload) como solução para a passagem de parâmetros com valor default.

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

25/09


LAB 4. (Trabalho a ser entregue até domingo, 27/09, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

Aula gravada no Drive.

28/09


Herança. Construtor default. Polimorfismo (a questão dos diferentes "pontos de vista").

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

30/09


Classes e métodos abstract.
Packages.

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

02/10


LAB 5. (Trabalho a ser entregue até domingo, 04/10, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

Tipos enumeráveis (enum). Alguns métodos úteis na classe String: split(regexp), startsWith(String), etc.
Concatenando Strings via StringBuffer (ou StringBuilder).
Referência para regular expressions (regexp) neste link.

Aula gravada no Drive.

05/10


Set. HashSet. Map. HashMap.
Noções rudimentares de complexidade. Testes de performance.

Código feito em aula no GitHub.
Aula gravada no Drive.

07/10


O DRY principle revisitado, aproveitando o polimorfismo para declarar variáveis, atributos e parâmetros com o tipo mais geral possível que faça sentido. Refactoring no código da aula passada e em projetos anteriores usando Collection e HashMap.
Usando o Collections.unmodifiableList() para retornar sua lista em modo read-only.

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

09/10


LAB 6.
Além do exercício descrito no link acima, modifique também seu projeto TuiterLite, do laboratório anterior, de forma a fazer os testes de performance passarem em tempo hábil com números grandes de iterações. Você pode usar como referência o código que fizemos hoje em sala de aula.
(Trabalho a ser entregue até terça, 13/10, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

O contrato do equals() com o hashCode().

Aula gravada no Drive.

14/10


Tratamento de exceções. O try...catch. Runtime exceptions vs checked exceptions. Testando exceções.

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

16/10


LAB 7.
(Trabalho a ser entregue até terça, 20/10, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

Aula gravada no Drive.

19/10


O conceito de interface em POO. Implementando interfaces via implements.
Restringindo tipos genéricos via extends.

Código feito em aula no GitHub aqui.
Aula gravada no Drive.

21/10


Revisão de quase tudo. :-)
Revisitamos o projeto da LojaVirtual, passado no LAB 4, e o melhoramos com o uso de interface.

Código feito em aula no GitHub aqui.
Aula gravada no Drive.

23/10


LAB 8.
(Trabalho a ser entregue até domingo, 25/10, às 23:59, via e-mail, com código em anexo ou link para repositório pessoal.)

A classe java.io.File. Lendo de arquivo com o Scanner que recebe um File no construtor.

Aula gravada no Drive.

26/10


Resolução do LAB 8.

Tipos enumeráveis com informações satélites. Inicializadores estáticos.

Código feito em aula no GitHub aqui e aqui.
Aula gravada no Drive.

28/10


Aula de dúvidas.

Código feito em aula no GitHub aqui.
Aula gravada no Drive.

30/10


Unit tests com mock. Ideia geral. O Mockito, para Java.

Conversa final sobre o curso. Explicação da avaliação e da auto-avaliação.

A auto-avaliação deve ser entregue até terça-feira, dia 03 de novembro, às 23:59. A descrição completa está aqui.

Código feito em aula no GitHub aqui.

Voltar ao topo