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

Herança de classes, pq não precisou importar o cliente?

Em um primeiro momento no projeto, a minha classe ContaCorrente utiliza um set: set cliente(novoValor) { if (novoValor instanceof Cliente){ this._cliente = novoValor;

O que eu entendi foi que esse set verifica se o cliente que você passa no parâmetro na hora de criar uma nova Conta Corrente faz parte da classe Cliente, se for true, ele aceita se não ele da um erro. Porém para isso, como a classe da Conta Corrente não "enxerga" a classe Cliente, por estarem separadas em módulos, eu faço a importação da classe Cliente na minha classe conta Corrente: import {Cliente} from ./Cliente.js. Agora a dúvida: Quando avançamos no projeto, criamos uma única classe pai, a classe Contas, que terá outras duas contas filhas: Conta Corrente e Conta Poupança, e portanto, agora eu utilizo esse set cliente lá na classe pai (Conta) e não mais nos filhos, já que ambos vão herdar este comportamento, mas porque la na classe Conta ele não utilizou o import do Cliente e funcionou?

2 respostas
solução!

Olá, Matheus, tudo bem contigo?

Muito bem observado! De fato, o código que agora temos na classe Conta é o seguinte:

export class Conta {
    constructor(saldoInicial, cliente, agencia) {
        this._saldo = saldoInicial;
        this._cliente = cliente;
        this._agencia = agencia;
    }

    set cliente(novoValor) {
        if (novoValor instanceof Cliente) {
            this._cliente = novoValor;
        }
    }

    // Restante do código da classe...
}

O instrutor realmente não fez a importação da classe Cliente. O que aconteceu na verdade foi um pequeno equícovo do professor no construtor, nessa linha:

        this._cliente = cliente;

Do modo que está, a atribuição no construtor é feita diretamente à propriedade privada _cliente, sem passar pelo acessor set cliente! Por isso o programa nem indicou a falta da classe Cliente, porque a verificação do setter não foi feita. Ou seja, o programa não indica erros se você passar qualquer valor para o cliente, ao instanciar um novo cliente.

Então o ideal é que tenhamos o seguinte no construtor:

        this.cliente = cliente;

Assim a atribuição irá passar pelo acessor set cliente! E agora deve ser feita a importação da classe Cliente, caso contrário dará erro no console ;)

Mais uma vez bem observado! Se tiver mais dúvidas estaremos aqui para ajudar. Abraços e bons estudos :)

Entendi, faz sentido mesmo então o programa não ter acusado nada. Obrigado.