1
resposta

[Projeto] Minha resolução

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Pedro. Como vai?

Sensacional! Você fez uma entrega massiva e de altíssima qualidade para os desafios do capítulo. É nítido que você compreendeu perfeitamente os pilares de Encapsulamento e Controle de Acesso em Java utilizando os métodos modificadores getters e setters.

Dividir o código mantendo as classes de modelo separadas das classes de execução (Principal) é a estrutura padrão utilizada no mercado de desenvolvimento Java. O design das suas classes ficou excelente e muito limpo.

Para enriquecer a sua postagem e valorizar o seu código, trago uma análise técnica detalhada dos seus acertos e um pequeno ponto de atenção na estrutura da classe bancária:


1. Destaques Positivos do seu Código

  • Lógica de Desconto Inteligente (Produto.java): A sua implementação do método aplicarDesconto ficou fantástica. Você utilizou o operador de atribuição composto (-=) de forma muito elegante:
preco -= desconto;

Isso demonstra maturidade na escrita do código. Além disso, o cálculo percentual preco * (percentual/100) roda sem problemas porque a variável recebe um tipo double.

  • Encapsulamento com Métodos Auxiliares (Livro.java e IdadePessoa.java): Criar métodos como exibirDetalhes() e verificarIdade() diretamente dentro da classe de modelo é uma excelente prática de Orientação a Objetos. Isso respeita o princípio de que a classe deve ser dona dos seus próprios comportamentos e dados, deixando a classe Principal responsável apenas por coordenar o fluxo.

2. Ponto de Atenção: Consistência no Encapsulamento (ContaBancaria.java)

Se olharmos com atenção para a quarta imagem (ContaBancaria.java e BancoPrincipal.java), há uma pequena quebra no padrão de encapsulamento que você aplicou perfeitamente nos outros arquivos.

Na definição dos atributos da classe ContaBancaria, você configurou numeroConta e saldo como private. Porém, o atributo titular foi declarado com o modificador de acesso public:

public String titular;

Por causa disso, na classe BancoPrincipal.java (linha 8 e 13), você acessou e modificou o nome diretamente sem usar métodos intermediários: conta1.titular = "Pedro";.

Por que corrigir isso?
O objetivo do encapsulamento é proteger os dados da classe contra acessos externos diretos. Mesmo que o nome do titular pareça uma informação simples que não cause problemas ao ser alterada, a boa prática estrita do Java determina que todos os atributos de uma classe de modelo devem ser privados, permitindo o acesso apenas via Getters e Setters.


Código Refatorado (Ajuste de Encapsulamento)

Veja como a sua estrutura de conta bancária fica 100% protegida e padronizada com o restante do seu projeto:

No arquivo ContaBancaria.java:

package br.com.alura.meuprojeto;

public class ContaBancaria {
    private int numeroConta;
    private double saldo;
    private String titular; // <--- Modificado para private

    public int getNumeroConta() {
        return numeroConta;
    }

    public void setNumeroConta(int numeroConta) {
        this.numeroConta = numeroConta;
    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    // Novos métodos modificadores para o Titular
    public String getTitular() {
        return titular;
    }

    public void setTitular(String titular) {
        this.titular = titular;
    }
}

No arquivo BancoPrincipal.java:

package br.com.alura.meuprojeto;

public class BancoPrincipal {
    public static void main(String[] args) {
        ContaBancaria conta1 = new ContaBancaria();

        conta1.setNumeroConta(123);
        conta1.setSaldo(1000);
        conta1.setTitular("Pedro"); // <--- Uso correto do Setter

        System.out.println("Número da Conta: " + conta1.getNumeroConta());
        System.out.println("Saldo Bancário: " + conta1.getSaldo());
        System.out.println("Titular: " + conta1.getTitular()); // <--- Uso correto do Getter

        conta1.setSaldo(1500);
        System.out.println("O saldo bancário agora é: " + conta1.getSaldo());
    }
}

Com esse pequeno ajuste, todo o seu ecossistema de classes fica blindado e seguindo as regras da comunidade Java. Um erro de digitação super comum na declaração do método getNome em Produto.java (onde ficou getNomenome) também vale a pena ser renomeado para manter a camelCase perfeita!

Parabéns pelo excelente empenho e pela quantidade de exercícios resolvidos com sucesso. Você está evoluindo muito rápido na linguagem!

Espero que possa ter lhe ajudado!