Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Interfaces

Durante a aula de interfaces me surgiram diversas dúvidas. Uma delas é: Qual o sentindo de alterar o getter senha (onde eu tinha um encapsulamento /proteção da senha) para um método autenticar e fazer com que o Funcionário/Cliente se autentique e com isso eles deem o retorno para o "SistemaDeAutentificacao". Ao meu ver, se tratando de responsabilidades, o Cliente ou funcionário não tem a obrigação de se autenticar Isso deveria estar dentro do sistema de autenticação, pois é de responsabilidade dela autenticar quem quer que seja (Cliente/funcionário). Outra dúvida é sobre interfaces, teriam algum exemplo melhor ? Pelo que eu sei de interfaces, elas nada mais são que um conjunto de métodos e propriedades ao qual a classe que irá implementa-la deve possuir. Gostaria de desmistificar melhor essa aula. já assistir umas 5x e ainda não entendi.

2 respostas
solução!

Vamos abordar suas dúvidas uma de cada vez.

1. Autenticação e Responsabilidades

Entendo sua preocupação com a alteração do getter de senha para um método de autenticação. Vamos analisar isso mais de perto.

Ao mover a responsabilidade de autenticação para a classe SistemaDeAutenticacao, você está seguindo o princípio de responsabilidade única (Single Responsibility Principle - SRP) do SOLID, que sugere que uma classe deve ter apenas um motivo para ser modificada.

No entanto, é importante considerar o contexto da aplicação e como as responsabilidades são distribuídas. Em alguns casos, faz sentido que a autenticação seja tratada separadamente, especialmente se houver complexidade envolvida na verificação de credenciais.

A ideia é separar as preocupações: a classe Funcionario ou Cliente deve se preocupar com seus próprios dados e comportamentos específicos, enquanto a classe SistemaDeAutenticacao lida com a autenticação em geral. Isso pode tornar o código mais modular e fácil de entender.

No entanto, a validação de autenticação ainda pode depender das informações específicas de um Funcionario ou Cliente. Nesse caso, você pode passar as informações necessárias (por exemplo, nome de usuário e senha) para o método de autenticação em SistemaDeAutenticacao.

2. Interfaces

Interfaces em programação são contratos que definem um conjunto de métodos que uma classe deve implementar. Elas ajudam a estabelecer um padrão e a fornecer uma maneira de garantir que diferentes classes possam ser usadas de maneira intercambiável.

Exemplo de uma interface em Java:

public interface Autenticavel {
    boolean autenticar(String usuario, String senha);
}

Neste exemplo, a interface Autenticavel define um método autenticar que espera um usuário e senha como parâmetros e retorna um booleano indicando se a autenticação foi bem-sucedida.

Você pode ter classes como Funcionario e Cliente implementando essa interface:

public class Funcionario implements Autenticavel {
    // ... outros membros e métodos da classe

    @Override
    public boolean autenticar(String usuario, String senha) {
        // Lógica de autenticação para funcionário
    }
}

public class Cliente implements Autenticavel {
    // ... outros membros e métodos da classe

    @Override
    public boolean autenticar(String usuario, String senha) {
        // Lógica de autenticação para cliente
    }
}

Ao utilizar interfaces, você pode tratar objetos de diferentes classes de maneira uniforme, desde que elas implementem a mesma interface. Isso é particularmente útil em situações em que você deseja um contrato claro para interação entre diferentes partes do sistema.

Carlos, muito obrigado pelo seu tempo e disposição para sanar minha dúvida. Algumas coisas começaram a fazer sentido. Teria algum material extra para indicar, acredito que me ajudaria muito a entender ainda mais. Muito obrigado =D