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

Static para método e para função

O professor usou o static no método para que o contador não ficasse zerando. exemplo: export class ContaCorrente {static numeroDeContas = 0; ...}

export class ContaCorrente {
    static numeroDeContas = 0;    
    ...
}

Mas, para função não entendi. exemplo:

export class SistemaAutenticacao {
    static login(autenticavel, senha){
        return autenticavel.autenticar(senha);
    }
}
1 resposta
solução!

Olá, Felipe, tudo bem?

Desculpe a demora em retornar.

Vamos começar entendendo que a palavra-chave "static" é utilizada em programação para definir algo que pertence à classe em si e não às suas instâncias (objetos). Isso significa que, quando um método ou atributo é declarado como estático, ele pode ser acessado diretamente pela classe, sem a necessidade de criar uma instância dela.

No exemplo que você citou, a classe "ContaCorrente" possui um atributo estático "numeroDeContas", que é utilizado para contar quantas instâncias dessa classe foram criadas. Isso é útil quando se deseja ter um controle global sobre as instâncias criadas, em vez de ter esse controle em cada objeto individualmente.

Já no caso da classe "SistemaAutenticacao", o método estático "login" é utilizado para autenticar um objeto que implemente a interface "Autenticavel". Nesse caso, a utilização do "static" é justificada pela necessidade de acessar o método diretamente pela classe, sem a necessidade de criar uma instância da classe "SistemaAutenticacao".

Isso é importante porque a classe "SistemaAutenticacao" é responsável por gerenciar a autenticação de usuários em todo o sistema, e é improvável que seja necessário criar mais de uma instância dela. Além disso, a utilização do método estático torna o código mais legível e fácil de entender, já que fica claro que a autenticação é feita pela classe em si e não por uma instância dela.

Um exemplo prático do uso do método estático "login" seria o seguinte:

import { SistemaAutenticacao } from './SistemaAutenticacao.js';
import { Cliente } from './Cliente.js';

const cliente = new Cliente('Felipe', '123456789-10', 'senha123');

if (SistemaAutenticacao.login(cliente, 'senha123')) {
    console.log('Login realizado com sucesso!');
} else {
    console.log('Senha incorreta!');
}

Nesse exemplo, criamos um objeto da classe "Cliente" e o passamos como parâmetro para o método estático "login" da classe "SistemaAutenticacao". Se a senha informada estiver correta, o método retorna "true" e o login é considerado válido.

Em resumo, a utilização do "static" em métodos e atributos é uma prática comum em programação orientada a objetos, e sua utilização depende do contexto em que é aplicada. Quando utilizada corretamente, ela pode tornar o código mais eficiente, legível e fácil de entender.

Um abraço e bons estudos.