1
resposta

[Projeto] Controle de senha

package Validacao;

public class Main {
    static void main(String[] args) {

        Senha validacao = new Senha("Gabriel", "1234abc");

        validacao.setSenha("1234");

    }
}
package Validacao;

import java.util.Scanner;

public class Senha {
    private String usuario;
    private String senha;

    public Senha(String usuario, String senha) {
        this.usuario = usuario;
        this.senha = senha;
    }

    Scanner ler = new Scanner(System.in);

    public String getSenha() {
        return senha;
    }

    public void setSenha(String novaSenha){
        System.out.println("Digite sua senha antiga pra alterar a senha");
        String tentativaSenha = ler.nextLine();

        if(tentativaSenha.equals(this.getSenha())){
            this.senha = novaSenha;
            System.out.println("Senha alterada com sucesso!");
        }else {
            System.out.println("Senha atual incorreta. A senha nao foi alterada.");
        }
    }
}
1 resposta

Oi, Gabriel.

Meus parabéns por finalizar o desafio de controle de senha. É muito bom ver como você está aplicando o encapsulamento para criar sistemas mais seguros e confiáveis.

Sua implementação traz um diferencial interessante: o uso do Scanner dentro da classe para interagir diretamente com o usuário no momento da troca. Isso torna o processo mais dinâmico. Você aplicou corretamente o modificador private no atributo senha e utilizou o método .equals() para a comparação de Strings, o que demonstra que você compreendeu bem a importância de proteger dados sensíveis e como compará-los adequadamente em Java.

Destaquei pontos positivos na sua estrutura:

  • Proteção de dados: Ao manter a senha privada, você impede que ela seja alterada de qualquer lugar do código sem passar pela sua lógica de validação.
  • Uso de construtor: Você inicializou o usuário e a senha de forma clara, garantindo que o objeto já nasça com as informações necessárias.
  • Feedback ao usuário: As mensagens de sucesso e erro estão bem claras, o que ajuda na usabilidade do sistema.

Para elevar ainda mais a qualidade do seu projeto, deixo duas observações técnicas:

  • Responsabilidade única: Em sistemas maiores, costumamos deixar a classe de modelo (como a sua classe Senha) apenas com os dados e lógica interna, movendo o Scanner para a classe Main. Isso facilita a manutenção e permite que a mesma classe seja usada em sistemas que não utilizam o console (como um aplicativo mobile ou web).
  • Parâmetros no método: Notei que você adicionou um getSenha() público. Em sistemas reais de segurança, evitamos expor a senha original, mesmo com um getter. Uma alternativa legal seria passar a "senha antiga" como parâmetro no próprio método setSenha(String senhaAntiga, String novaSenha), como sugerido no desafio original.

Para entender melhor como organizar essas responsabilidades, vale a pena ler sobre o SOLID: o que é e quais os 5 princípios da Programação Orientada a Objetos (POO), que ajuda a decidir onde colocar cada parte do seu código.

Você conseguiu notar como a proteção do atributo com private impede que alguém mude a senha simplesmente fazendo um validacao.senha = "nova_senha" na classe Main?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!