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:
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.
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.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.
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!