Spec Sistemas Com Java • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 05.1 — Classe com Encapsulamento e Getters/Setters Defensivos

Contexto: Classe com Encapsulamento e Getters/Setters Defensivos no contexto de Classes, Construtores, Sobrecarga e Encapsulamento.

Requisitos de Execução:

  1. Criar classe Funcionario com atributos privados e validação no setter de salário.

Resultado Esperado

Regra de negócio validada no encapsulamento da classe.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_1_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Classes, Construtores, Sobrecarga e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

public class Funcionario {
    private String nome;
    private double salario;

    public Funcionario(String nome, double salario) {
        this.nome = nome;
        setSalario(salario);
    }

    public void setSalario(double salario) {
        if (salario < 1412.0) throw new IllegalArgumentException("Salario abaixo do minimo");
        this.salario = salario;
    }
    public double getSalario() { return salario; }
}

🔍 Nível 2: Prática

Problema 05.2 — Sobrecarga de Construtores com this() Chaining

Contexto: Sobrecarga de Construtores com this() Chaining no contexto de Classes, Construtores, Sobrecarga e Encapsulamento.

Requisitos de Execução:

  1. Criar múltiplos construtores encadeando a inicialização no construtor completo com this(...).

Resultado Esperado

Sobrecarga de construtores encadeada com segurança.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_2_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Classes, Construtores, Sobrecarga e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

public class Produto {
    private String nome;
    private double preco;

    public Produto(String nome) { this(nome, 0.0); }
    public Produto(String nome, double preco) {
        this.nome = nome;
        this.preco = preco;
    }
}

⚡ Nível 3: Integração

Problema 05.3 — Membros Estáticos (static) e Padrão Singleton Thread-Safe

Contexto: Membros Estáticos (static) e Padrão Singleton Thread-Safe no contexto de Classes, Construtores, Sobrecarga e Encapsulamento.

Requisitos de Execução:

  1. Implementar Singleton com Bill Pugh (Holder estático interno) para inicialização lazy e thread-safe.

Resultado Esperado

Padrão Singleton instanciado com segurança absoluta de concorrência.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_3_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Classes, Construtores, Sobrecarga e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

public class ConfiguradorApp {
    private ConfiguradorApp() {}

    private static class Holder {
        private static final ConfiguradorApp INSTANCIA = new ConfiguradorApp();
    }

    public static ConfiguradorApp getInstancia() {
        return Holder.INSTANCIA;
    }
}

🏆 Nível 4: Desafio Corporativo

Problema 05.4 — Construtores Privados e Métodos Fábrica Estáticos (Static Factory Methods)

Contexto: Construtores Privados e Métodos Fábrica Estáticos (Static Factory Methods) no contexto de Classes, Construtores, Sobrecarga e Encapsulamento.

Requisitos de Execução:

  1. Substituir construtores públicos por métodos semânticos como Conta.abrirCorrente() e Conta.abrirPoupanca().

Resultado Esperado

Criação de instâncias expressiva via Static Factory Methods.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_05_4_SeuNome
  2. Envie na tarefa: Atividade Cap 05 - Classes, Construtores, Sobrecarga e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
package com.empresa.sistemas;

public class ContaBancaria {
    private String tipo;
    private ContaBancaria(String tipo) { this.tipo = tipo; }

    public static ContaBancaria criarCorrente() { return new ContaBancaria("CORRENTE"); }
    public static ContaBancaria criarPoupanca() { return new ContaBancaria("POUPANCA"); }
}