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

Seria viável declarar a variável "taxa" como atributo da classe?

Seria viável declarar a variável taxa como atributo da classe, ao invés de declara-la no escopo do método? Dessa maneira, passando como parâmetro para o método sacar e utilizando-o sem a necessidade de criação de um outro método ou de sobrescrita.

2 respostas
solução!

Olá, Gabriel, tudo bem? Desculpe-nos a demora!

Achei bem interessante sua proposta! Teríamos, por exemplo, algo assim no construtor da classe Conta:

    constructor(saldoInicial, cliente, agencia, taxa) {    
        this._saldo = saldoInicial;
        this.cliente = cliente;
        this._agencia = agencia;
        this._taxa = taxa;  // adicionando atributo _taxa privado
    }

E no contrutor da classe ContaCorrente, por exemplo, poderíamos ter isso:

    constructor(cliente, agencia) {
        super(0, cliente, agencia, 1.1);  // fornecendo o valor da _taxa da ContaCorrente
        ContaCorrente.numeroDeContas += 1;
    }

Assim, o método sacar() da classe Conta ficaria assim:

    sacar(valor) {
        return this._sacar(valor, this._taxa);
    }

Fazendo isso, basicamente poderíamos remover o método sacar() próprio de cada classe filha. O único problema que vejo nessa abordagem é que perdemos a possibilidade de personalizar o método sacar() das classes filhas, caso queiramos aplicar alguma regra de negócio no futuro.

Então no meu ponto de vista, apesar de fazer a taxa ser um atributo funcionar, acredito que a abordagem do instrutor deixa nosso código mais flexível para mudanças futuras, basicamente porque temos mais liberdade em trabalhar com métodos do que com atributos. Apesar disso, nada também nos impede de manter o atributo _taxa e criar métodos sacar() próprios caso queiramos um comportamento específico em uma classe filha.

Achei muito bacana você imaginar soluções alternativas, e queremos que você realmente reflita nas vantagens e desvantagens de cada abordagem. Assim você trabalha sua capacidade de resolução de problemas e se torna um desenvolvedor melhor.

Espero ter ajudado! Abraços e bons estudos :)

Entendi, não tinha pensando por esse ponto de vista, agradeço a ajuda