Fala pessoal, boa noite. Estou com uma dúvida sobre a aula 04 - Super e sobrescrita Pesquisando aqui, encontrei uma dúvida parecida com a minha, que está neste tópico: https://cursos.alura.com.br/forum/topico-sobrescricao-da-funcao-transferir-na-conta-150448#935078 A questão é, eu fiz de outra forma e gostaria de saber qual a melhor prática neste caso, seguir o que o amigo fez lá no outro fórum, ou isso que eu fiz. Segue o codigo: Classe Conta
export class Conta {
//Como boa prática, devemos declarar e inicializar propriedades dentro de algum método da classe (o construtor é o mais comumente usado);
constructor(saldoInicial, cliente, agencia) {
this._saldo = saldoInicial;
this._cliente = cliente;
this._agencia = agencia;
}
//Protegendo o _cliente
set cliente(novoValor) {
if (novoValor instanceof Cliente) {
this._cliente = novoValor;
}
}
get cliente() {
return this._cliente;
}
//Protegendo o _saldo
get saldo() {
return this._saldo;
}
sacar(valor) {
let taxa = 1;
let valorSacado = valor*taxa;
if (this._saldo >= valorSacado) {
this._saldo -= valorSacado;
console.log(`Valor sacado foi R$ ${valorSacado}. Saldo restante:R$ ${this._saldo}`);
return valorSacado;
} else {
console.log(`Saldo insuficiente para o saque.`);
return valorSacado = 0;
}
}
depositar(valor) {
if (valor <= 0) {
return
}
this._saldo += valor;
console.log(`Seu novo saldo é R$${this._saldo}`)
}
transferir(valor, conta) {
conta.depositar(this.sacar(valor));
}
}
Para evitar o débito de taxa durante uma transferencia, fiz o seguinte: adicionei o método transferir na classe Conta Corrente, e utilizei o super para invocar o método da classe mãe (ou pai) sacar:
import { Cliente } from "./Cliente.js";
import { Conta } from "./Conta.js";
export class ContaCorrente extends Conta {
//Atributos estáticos: São atributos da classe no geral, não das instancias
static quantidadeContasCorrente = 0;
constructor(cliente, agencia) {
//Invocando o método super, que traz o construtor dessa classe pai, referenciando os atributos na classe filha
super(0, cliente, agencia);
//Incrementando a quantidade de contas correntes automaticamente. Como é um atributo da classe (tipo estático), ao invés de referencia-lo pelo this,
//devemos chamar o nome da classe.atributo.
ContaCorrente.quantidadeContasCorrente++;
}
sacar(valor) {
let taxa = 1.1;
let valorSacado = valor * taxa;
if (this._saldo >= valorSacado) {
this._saldo -= valorSacado;
console.log(`Valor sacado foi R$ ${valor}. Saldo restante:R$ ${this._saldo}. Esta transação gerou R$${(valorSacado - valor).toFixed(2)} de taxas administrativas`);
return valorSacado;
} else {
console.log(`Saldo insuficiente para o saque.`);
return valorSacado = 0;
}
}
transferir(valor, conta) { //transferencias sem taxas
conta.depositar(super.sacar(valor));
}
}
Também funcionou corretamente, mas qual a melhor prática?