Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Estou tendo dificuldade para entender qual a melhor forma para montar o código sem deixar confuso.

Não entendi muito bem qual a forma correta de utilizar as classes e usar seus comportamentos para fazer o código funcionar.

package senha.de.controle;

public class Usuario {
    private String senha;

    public Usuario(String senha) {
        this.senha = senha;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
}

package senha.de.controle;

public class ValidarSenha {

    public void alterarSenha(Usuario u, String senhaAntiga, String novaSenha){

        if(u.getSenha().toUpperCase().equals(senhaAntiga.toUpperCase())){

            u.setSenha(novaSenha);
            System.out.println("Senha alterada com sucesso.");
        }else{
            System.out.println("Senha atual incorreta.\nA senha não foi alterada.");
        }
    }
}

package senha.de.controle;

import java.util.Scanner;

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

        Usuario user1 = new Usuario("123456");
        ValidarSenha verificaSenha = new ValidarSenha();
        Scanner read = new Scanner(System.in);
        int i;

        do{
            System.out.println("Insira a senha antiga:");
            String senhaAntiga = read.nextLine();
            System.out.println("Insira a nova senha: ");
            String senhaNova = read.nextLine();
            verificaSenha.alterarSenha(user1, senhaAntiga, senhaNova);

            System.out.println("Deseja alterar a senha?\n1.sim\n2.não");
            i = read.nextInt();
            read.nextLine();
        }while (i != 2);
        read.close();

    }
}
1 resposta
solução!

Olá Augusto! Tudo joia?

Vamos analisar o seu código e ver como podemos melhorar a organização e a segurança, especialmente em relação ao encapsulamento e à segurança da senha.

  1. Encapsulamento e Segurança: No seu código atual, a senha é diretamente acessível através dos métodos getSenha e setSenha, o que não é ideal para segurança. Uma boa prática seria evitar expor a senha diretamente. Podemos modificar a classe Usuario para que a senha só possa ser alterada através de um método que também verifica a senha atual.

  2. Método de Alteração de Senha: Vamos integrar a lógica de validação da senha dentro da própria classe Usuario. Isso melhora o encapsulamento e segurança, pois a senha não precisa ser exposta fora da classe.

Aqui está uma sugestão de como você pode reestruturar o código:

package senha.de.controle;

public class Usuario {
    private String senha;

    public Usuario(String senha) {
        this.senha = senha;
    }

    public boolean alterarSenha(String senhaAntiga, String novaSenha) {
        if (this.senha.equals(senhaAntiga)) {
            this.senha = novaSenha;
            System.out.println("Senha alterada com sucesso.");
            return true;
        } else {
            System.out.println("Senha atual incorreta. A senha não foi alterada.");
            return false;
        }
    }
}
  1. Classe Principal: Agora, você pode simplificar a classe ControleDeSenhaMain para usar o método alterarSenha diretamente no objeto Usuario.
package senha.de.controle;

import java.util.Scanner;

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

        Usuario user1 = new Usuario("123456");
        Scanner read = new Scanner(System.in);
        int i;

        do {
            System.out.println("Insira a senha antiga:");
            String senhaAntiga = read.nextLine();
            System.out.println("Insira a nova senha: ");
            String senhaNova = read.nextLine();
            user1.alterarSenha(senhaAntiga, senhaNova);

            System.out.println("Deseja alterar a senha?\n1.sim\n2.não");
            i = read.nextInt();
            read.nextLine();
        } while (i != 2);
        read.close();
    }
}

Com essas mudanças, o código fica mais seguro e o encapsulamento é respeitado, já que a lógica de alteração de senha está dentro da classe Usuario. Assim, a senha não é exposta diretamente e a lógica de validação é centralizada.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.