exercíciosexercícios

Agora que você já praticou atributos e métodos (neste post), chegou a hora de deixar suas classes mais profissionais. Afinal, no mundo real, um objeto quase nunca nasce “vazio”. Portanto, o objetivo desta lista é treinar método construtor e sobrecarga para criar objetos já inicializados, com valores padrão e com várias formas de instanciar.

Além disso, não tente correr: resolva um por vez. Em seguida, teste várias criações de objetos no main. Por fim, compare soluções com colegas, porque isso também acelera muito seu aprendizado.


Nível 1 — Iniciante (Construtor básico + valores padrão)

1) Pessoa 2.0 (construtor obrigatório)

Crie a classe Pessoa com nome, idade, altura.

Regras:

  • Crie um construtor Pessoa(String nome, int idade, double altura).
  • No main, crie 3 pessoas com dados diferentes e imprima os valores.

Além disso, mantenha o método fazerAniversario() do exercício antigo.


2) Produto com preço padrão

Crie a classe Produto com nome, preco, quantidadeEstoque.

Construtores:

  • Produto(String nome, double preco, int quantidadeEstoque)
  • Produto(String nome, double preco) → estoque padrão = 0

Em seguida, crie dois produtos no main, um com estoque e outro sem estoque.


3) Livro com página padrão

Crie a classe Livro com titulo, autor, numeroPaginas.

Construtores:

  • Livro(String titulo, String autor, int numeroPaginas)
  • Livro(String titulo, String autor)numeroPaginas padrão = 100

Além disso, crie exibirDetalhes() e imprima os dois livros.


4) Lâmpada Inteligente com estado inicial

Crie LampadaInteligente com cor, intensidade, estaLigada.

Construtores:

  • LampadaInteligente(String cor, int intensidade, boolean estaLigada)
  • LampadaInteligente() → cor = “Branca”, intensidade = 50, estaLigada = false

Depois, teste ligar(), desligar() e mudarCor().


5) Aplicativo Mobile com downloads iniciando em 0

Crie AplicativoMobile com nome, tamanhoEmMb, numeroDeDownloads.

Construtores:

  • AplicativoMobile(String nome, double tamanhoEmMb)
  • AplicativoMobile(String nome, double tamanhoEmMb, int numeroDeDownloads)

Em seguida, crie um app novo (downloads 0) e um app já famoso (downloads alto).


Nível 2 — Intermediário (Sobrecarga + this(…) para evitar repetição)

6) Conta Bancária com 3 construtores (usando this)

Crie ContaBancaria com titular, numeroConta, saldo.

Construtores:

  • ContaBancaria(String titular, String numeroConta, double saldo)
  • ContaBancaria(String titular, String numeroConta) → saldo padrão = 0 (use this(...))
  • ContaBancaria() → titular = “Não informado”, numeroConta = “0000”, saldo = 0 (use this(...))

Além disso, implemente depositar(double) e sacar(double) com validação.


7) Veículo com ano automático

Crie Veiculo com marca, modelo, ano.

Construtores:

  • Veiculo(String marca, String modelo, int ano)
  • Veiculo(String marca, String modelo) → ano padrão = ano atual (use java.time.Year.now().getValue())

Depois, crie calcularTempoDeUso().


8) PostagemBlog com visualizações padrão e autor opcional

Crie PostagemBlog com titulo, texto, autor, numeroDeVisualizacoes.

Construtores:

  • PostagemBlog(String titulo, String texto, String autor, int numeroDeVisualizacoes)
  • PostagemBlog(String titulo, String texto, String autor) → visualizações padrão = 0
  • PostagemBlog(String titulo, String texto) → autor padrão = “Anônimo” e visualizações = 0 (use this(...))

Crie o método compartilhar() que soma +10 visualizações.


9) JogadorVideoGame com apelido obrigatório e nível opcional

Crie JogadorVideoGame com nickname, pontuacao, nivel.

Construtores:

  • JogadorVideoGame(String nickname) → nível 1 e pontuação 0 (use this(...))
  • JogadorVideoGame(String nickname, int nivel) → pontuação 0
  • JogadorVideoGame(String nickname, int nivel, int pontuacao)

Depois, faça subirDeNivel().


10) EquipamentoGinastica com material padrão

Crie EquipamentoGinastica com nome, pesoEmKg, material.

Construtores:

  • EquipamentoGinastica(String nome, double pesoEmKg, String material)
  • EquipamentoGinastica(String nome, double pesoEmKg) → material padrão = “Aço”

Além disso, crie exibirInformacoes().


Nível 3 — Desafio (Construtores com validação + regras de negócio)

11) Ação do Mercado com validação

Crie AcaoMercado com codigoEmpresa, valorAtual.

Construtores:

  • AcaoMercado(String codigoEmpresa, double valorAtual)
  • AcaoMercado(String codigoEmpresa) → valorAtual padrão = 0

Regras:

  • Se valorAtual < 0, ajustar para 0.
  • Método atualizarValor(double novoValor) não deve aceitar valor negativo.

12) Máquina Virtual com estado inicial (rodando ou não)

Crie MaquinaVirtual com nome, memoriaRam, estaRodando.

Construtores:

  • MaquinaVirtual(String nome, int memoriaRam, boolean estaRodando)
  • MaquinaVirtual(String nome, int memoriaRam) → estaRodando = false

Além disso, iniciar() e parar() devem respeitar o estado atual (não iniciar se já estiver rodando, etc.).


13) Roteador Wi‑Fi com limites

Crie PontoDeAcesso com nomeDaRede, numeroDeDispositivos, limiteDispositivos.

Construtores:

  • PontoDeAcesso(String nomeDaRede, int limiteDispositivos)
  • PontoDeAcesso(String nomeDaRede) → limite padrão = 10

Regras:

  • conectarNovoDispositivo() só conecta se não exceder o limite.
  • desconectarDispositivo() não pode deixar o número negativo.

14) Pedido de E-commerce com itens iniciais

Crie Pedido com codigo, quantidadeItens, valorTotal.

Construtores:

  • Pedido(String codigo) → quantidadeItens = 0, valorTotal = 0
  • Pedido(String codigo, int quantidadeItens) → valorTotal começa em 0
  • Pedido(String codigo, int quantidadeItens, double valorTotal)

Além disso, crie adicionarItem(double valorItem) que:

  • soma +1 na quantidade
  • soma valorItem ao total (não aceitar valorItem <= 0)

15) Agenda de Compromissos (sobrecarga por tipos diferentes)

Crie Compromisso com titulo, data e hora.

Sugestão:

  • Use String data e String hora para ficar fácil no começo.

Construtores:

  • Compromisso(String titulo, String data, String hora)
  • Compromisso(String titulo, String data) → hora padrão = “00:00”
  • Compromisso(String titulo) → data padrão = “Sem data”, hora padrão = “00:00” (use this(...))

Depois, crie exibir() para mostrar tudo formatado.


Exemplo resolvido (modelo de como o aluno pode entregar)

A ideia é mostrar sobrecarga + this(…) de forma limpa.

public class ContaBancaria {
    String titular;
    String numeroConta;
    double saldo;

    public ContaBancaria(String titular, String numeroConta, double saldo) {
        this.titular = titular;
        this.numeroConta = numeroConta;
        this.saldo = saldo;
    }

    public ContaBancaria(String titular, String numeroConta) {
        this(titular, numeroConta, 0.0);
    }

    public ContaBancaria() {
        this("Não informado", "0000", 0.0);
    }

    public void depositar(double valor) {
        if (valor <= 0) {
            System.out.println("Valor inválido para depósito.");
            return;
        }
        saldo += valor;
        System.out.println("Depósito: R$ " + valor + " | Saldo: R$ " + saldo);
    }

    public void sacar(double valor) {
        if (valor <= 0) {
            System.out.println("Valor inválido para saque.");
            return;
        }
        if (valor > saldo) {
            System.out.println("Saldo insuficiente. Saldo atual: R$ " + saldo);
            return;
        }
        saldo -= valor;
        System.out.println("Saque: R$ " + valor + " | Saldo: R$ " + saldo);
    }

    public static void main(String[] args) {
        ContaBancaria c1 = new ContaBancaria("Ana", "1234", 100);
        ContaBancaria c2 = new ContaBancaria("Bruno", "9999");
        ContaBancaria c3 = new ContaBancaria();

        c1.sacar(30);
        c2.depositar(50);
        c3.depositar(10);
    }
}

Extra: por que Java é tão bom para treinar construtores e sobrecarga?

Antes de tudo, vale lembrar que o Java é uma das linguagens mais usadas quando o assunto é programação orientada a objetos. Por isso, quando você pratica método construtor e sobrecarga, você não está apenas “fazendo exercício”: você está treinando um padrão que aparece o tempo todo em sistemas reais. Além disso, como o Java é fortemente tipado, ele te obriga a deixar as regras bem explícitas e, consequentemente, isso acelera o seu aprendizado.

1) Construtores deixam o objeto pronto desde o início

Em primeiro lugar, construtores bem feitos deixam o código mais confiável, porque o objeto já nasce em um estado válido. Ou seja, em vez de criar um objeto “vazio” e depois preencher atributo por atributo, você garante tudo logo no começo. Portanto, você reduz erros e, ao mesmo tempo, melhora a legibilidade.

Além disso, quando você define valores padrão no construtor, você evita null desnecessário. Assim, seu código fica mais estável e, consequentemente, mais fácil de testar.

2) Sobrecarga ajuda a criar objetos de várias formas, sem bagunça

Em seguida, a sobrecarga de construtores permite criar objetos de maneiras diferentes, porém mantendo a mesma classe organizada. Por exemplo, você pode ter um construtor “completo” e outro “simplificado” com valores padrão. Dessa forma, quem usa a classe escolhe a opção mais adequada.

Além disso, essa técnica deixa o main mais limpo, porque você passa os dados essenciais na criação do objeto. Portanto, você escreve menos código repetido e, ainda assim, mantém clareza.

3) Use this(...) para não repetir lógica

Por outro lado, se você copiar e colar a mesma lógica em todos os construtores, o código pode ficar confuso. Nesse caso, uma boa prática é centralizar a inicialização chamando um construtor a partir de outro com this(...). Assim, você evita repetição, mantém um único ponto de verdade e, consequentemente, diminui a chance de inconsistências.

Além disso, quando a regra mudar (por exemplo, um novo valor padrão), você altera em um só lugar. Logo, a manutenção fica muito mais simples.

4) Próximos passos depois desta lista de exercícios

Depois que você terminar os exercícios, tente evoluir a dificuldade com calma. Primeiramente, coloque atributos como private e crie getters/setters. Em seguida, adicione validações (idade negativa, saldo inválido, limite de dispositivos, etc.). Além disso, implemente toString() para imprimir objetos com mais facilidade. Dessa maneira, seu código fica mais próximo do padrão de mercado.

Por fim, tente refazer alguns exercícios sem consultar a solução. Portanto, você fixa os conceitos de verdade. Finalmente, quando construtor e sobrecarga estiverem naturais, herança e polimorfismo começam a fazer muito mais sentido.

By Infodiversao

Adoro tecnologia e informação. Gosto de jogos eletrônicos e de esportes. Desejo que todos tenham uma ótima vida!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *