Curso: Tecnologia em Sistemas para Internet • 2º semestre

Introdução à Orientação a Objetos (ARQINOO)

Aula 04 — Exercícios - Encapsulamento


Prof. José Rodolfo Beluzo

Objetivos da prática

  • Aplicar encapsulamento com private e métodos de acesso.
  • Implementar regras de negócio dentro da classe (validações).
  • Separar estado e comportamento de forma segura.
  • Escrever métodos públicos coesos e previsíveis.

Dica: priorize invariantes (regras que devem ser sempre verdadeiras) nos setters e métodos de mutação.

Boas práticas

  • Atributos: private por padrão.
  • Exponha somente o necessário via get/set e métodos de serviço.
  • Valide na entrada (setters, construtores e métodos públicos).
  • Mantenha a classe sempre válida após qualquer operação.

Exercício 1 — Retângulo (dimensões seguras)

  • Crie a classe Retangulo com largura e altura (double, private).
  • Valide em setters/contrutor: valores > 0 e ≤ 10_000.
  • Métodos públicos: area() e perimetro().
  • Não Permitir números negativos ou fora do intervalo definido

Exercício 2 — Pessoa

  • Crie a classe Pessoa com String nome, String mini-bio e int idade.
  • Forneça construtor e getters/setters.
  • Valide em setIdade: idade ≥ 0 e ≤ 130 (faixa realista).
  • Valide em setNome: não nulo, não vazio e com pelo menos 2 caracteres.
  • Valide em setMiniBio: não nulo, não vazio e com pelo menos 15 caracteres e máximo de 100 caracteres.
  • Criar Método exibePessoa() com o nome, idade e mini bio.
  • Crie uma classe Main para testar: duas instâncias válidas e dois testes inválidos (ex.: idade negativa, nome vazio).

Exercício 3 — Produto (desconto controlado)

  • Atributos private: nome, preco (> 0), desconto (0 a 0.5).
  • Métodos: setDesconto(double d) valida faixa; precoFinal() retorna preco * (1 - d).
  • Proíba setPreco com valores ≤ 0.
  • Desconto pode ser de 0 a 25% caso o valor do produto seja menor que 1000.00; ou até 50% caso o valor seja maior que 1000.00.
  • Inclua exibeVenda() exibindo preço base, desconto (%) e preço final.

Exercício 4 — Carro (velocidade máxima)

  • Atributos private: modelo, velocidadeAtual, velocidadeMaxima (> 0).
  • Métodos: acelerar(int inc) e frear(int dec) garantindo 0 ≤ velocidadeAtualvelocidadeMaxima.
  • setVelocidadeMaxima não pode ser menor que a atual.
  • Inclua status() que retorna string com dados do carro.
  • Criar um main() que realiza ao menos 4 variações de velocidade e 2 variações inválidas

Exercício 5 — Livro (empréstimo controlado)

  • Atributos private: titulo, autor, disponivel (boolean).
  • Métodos: emprestar() só funciona se disponivel for true; devolver() faz o inverso.
  • Proíba estados inválidos (ex.: emprestar duas vezes seguidas).
  • Crie um main() que gerencia 3 livros e imprime o status.

Exercício 6 — Estoque (quantidade segura)

  • Atributos private: produto (String), quantidade (int, ≥ 0).
  • Métodos: repor(int qtd) (qtd > 0) e retirar(int qtd) (qtd > 0 e ≤ disponível).
  • Getter de quantidade; sem setQuantidade público.
  • Rodar casos de teste que cubram bordas (retirar exatamente o disponível, retirar a mais, etc).

Exercício 7 — Funcionário (salário protegido)

  • Atributos private: nome, salario (double).
  • Métodos: setSalario impede valores abaixo do mínimo (ex.: 1518.00).
  • aumentarSalario(double percentual) com percentual > 0; impede queda abaixo do mínimo.
  • Inclua reajusteAbsoluto(double valor) (> 0) como variação alternativa.