Exercícios
Tema: Encapsulamento
- Esses exercícios deverão ser implementados de forma livre em um primeiro momento.
- Em um segundo momento, os 4 primeiros estudante que concluírem escreverão os casos de teste para os exercícios e complementarão a descrição das regras de cada exercício.
- Cada estudante avaliará o código de outros 3 estudantes de acordo com os critérios definidos a seguir:
Critérios de avaliação
Cada critério deve ser avaliado com uma nota de 1 a 3. O significado da nota é dado em cada critério.
- Legibilidade - facilidade de entender o código. O código possui nomes de variáveis claros e está bem indentado. Nota relativa às ocorrências de problemas de legibilidade: 1 - muitas ocorrências, 2 - poucas ocorrências e 3 - nenhuma ocorrência)
- Estilo e consistência - boas práticas de programação foram utilizadas no código: i. convenção de nomenclatura (camelCase), ii. tipos de dados apropriados (não usar um tipo quando outro é mais apropriado), iii. evitar código duplicado, iv. comentar código, quando necessário, e não usar comentários supérfluos, v. indicar erros com exceções e não
System.out.println()
. Nota relativa às ocorrências de problemas de estilo: 1 - muitas ocorrências, 2 - poucas ocorrências e 3 - nenhuma ocorrência) - Complexidade - o código resolve o problema da forma mais simples possível. Nesse caso, verifique a existência de condições ou operações muito complexas, quantidade de métodos desnecessária, laços e condições aninhadas desnecessariamente. Nota relativa à complexidade: 1 - muito complexo, difícil de entender, 2 - complexidade média, pode ser mais simples e 3 - baixa complexidade, fácil de entender)
Exercício 1
Crie uma classe ContaBancaria
representando uma conta bancária com métodos para depositar, sacar e verificar o saldo.
- Use encapsulamento para proteger o saldo.
- Ao tentar sacar um valor quando o saldo é zero, esse valor é descontado do cheque especial.
Extra
Crie métodos de validação para usar nos métodos de depositar e sacar. Exemplos de possíveis validações:
- Saques acima de x reais não podem ser feitos a partir de determinado horário. Use a criatividade para representar o conceito de horário.
- Crie testes de unidade para as validações que você implementar.
Exercício 2
Crie a classe Reserva
, que pertenceria a um sistema de reservas de hotel. A classe possui os atributos: número do quarto, nome do hóspede, valor por diária, data de check-in e data de check-out. Implemente métodos para reservar, cancelar a reserva, calcular o número de diárias entre as datas de reserva.
- Implemente descontos para um determinado número de diárias: 5 a 9 diárias -> 5%, 10 ou mais diárias -> 10%
Extra
- Determine a quantidade mínima e máxima de diárias para a reserva.
- Determine o horário de check-out, para que seja possível determinar o número de diárias de forma mais clara.
Exercício 3
Implemente a classe Personagem
, que representa um personagem de jogo. Crie os atributos encapsulados para: nome, pontos de saúde e experiência. Além disso, implemente os métodos para sofrer dano,recuperar saúde e ganhar experiência.
- A saúde máxima do personagem é 100.
- Ganhar experiência aumenta a experiência do personagem em 100 pontos. O limite é 1000. O valor da experiência não é mais incrementado ao atingir 1000.
- O dano sofrido do personagem segue a seguinte regra: inicialmente, o dano sofrido é 10 e vai sendo reduzido de 1 em 1, conforme a experiência cresce: para experiência 0 -> dano 10, 100 -> dano 9, 200 -> dano 8, …, 1000 -> dano 1.
Extra
Crie uma regra para sofrer menos dano conforme a experiência do personagem aumenta. Obviamente, o dano nunca pode atingir zero e a experiência deve ter um limite máximo.
Exercício 4
Crie a classe Postagem
, que representa uma postagem de uma rede social textual. Os atributos de uma postagem são: texto, data, autor e número de curtidas. Os atributos texto, data e autor poderão ser manipulados somente através dos respectivos getters e setters, mas o número de curtidas terá somente o método acessor getCurtidas. O número de curtidas poderá ser alterado através dos métodos curtir() e descurtir(), que incrementará ou decrementará o número de curtidas em 1, respectivamente. O número mínimo de curtidas que uma postagem pode ter é 0. Descurtir além desse limite não causará nenhuma mudança.
Extra
Pense em como garantir que um usuário somente pode curtir uma postagem uma única vez.