Computação 2 — Linguagem Java — 2020/2
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_2020_2] LAB1" (sem as aspas, e com a numeração do lab de acordo: 1, 2, etc.);
- Data da prova: segunda-feira, 07 de junho de 2021.
Enunciado da prova:
1- Baixe o projeto Biblioteca que se encontra no GitHub.
2- Faça os testes passarem (a maior quantidade que você puder), sem modificar a classe de teste.
3- Envie seu código por email para vigusmao@dcc.ufrj.br com o assunto "[Comp2_2020_2] PROVA -- Aluno(a): Seu Nome Completo".
4- Explique, no corpo do e-mail, e sem necessidade de escrever código, que tipo de alteração você faria se quisesse fazer com que usuários fossem
categorizados como INICIANTE, EXPERIENTE ou ILIMITADO, com um número mínimo de livros devolvidos para passar de um nível para o outro,
e fazendo com que a quantidade máxima de livros emprestados ao mesmo tempo para um usuário fosse função de sua categoria.
5- Explique, no corpo do e-mail, e sem necessidade de escrever código, que tipo de alteração você faria se quisesse permitir que sua biblioteca
emprestasse também jogos, revistas e DVDs.
6- Explique, no corpo do e-mail, e sem necessidade de escrever código, que tipo de alteração você faria se quisesse permitir que certas instâncias de Biblioteca
pudessem emprestar apenas livros, ou apenas jogos, ou apenas revistas, ou apenas DVDs.
Cada teste vale 0,5 pontos. Cada uma das questões descritas nos itens 4, 5 e 6 acima vale 1,0 ponto. Entrega por e-mail até as 10:10 da manhã do dia 07/06/21.
BOA PROVA!!!
- Repositório do código criado em sala de aula:
https://github.com/vigusmao/Comp2_2020_2
- 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
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.