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

Resolvi de uma mandeira diferente, é viavel?

E ai, podem me dar a sua opinião?

Ao invés de criar novas funções como o instrutor para resolver a questão de diferentes comportamentos do metodo sacar entre diferentes tipos de contas, fiz o seguinte:

class ContaCorrente extends Conta {
    constructor(agencia) {
        super(agencia),
            this.depositoMin = 100,
            this.saqueMin = 0,
            this.taxaDeposito = 0.01,
            this.taxaSaque = 0,
            this.juros = 0
    }
}

Defini os parâmetros especiais de cada tipo de conta na sua declaração como variáveis. Ignorando a questão de imutabilidade e dos "_" desse trecho de codigo, será que isso é uma solução viável no mundo real?

5 respostas

Fala Lúcio, tudo bem? Consegue me mandar o código do instrutor também? Não fiz o curso então não tenho contexto dos códigos referente ao mesmo.

Me manda os dois códigos, dai eu consigo ver a diferença e te ajudar de uma maneira mais objetiva.

Fico no aguardo.

Tudo Matheus, valeu por responder rápido.

Explicando melhor o problema: No sistema de banco que estamos criando existe a classe abstrata Conta, que carrega funções gerais como Sacar e Depositar. A questão é sobre qual o melhor jeito de definir as diferenças entre os tipos de contas, nesse caso especificamente sobre o método Sacar. A solução do instrutor foi criar um método Saque novo para cada tipo de conta (sobrescrevendo o método herdado de Conta) com as alterações necessárias:

https://github.com/alura-cursos/js-heranca-polimorfismo/blob/aula3/ContaCorrente.js

Mas pensei que poderia ser mais eficiente adaptar o método Saque da classe Conta para suportar variáveis e especifica-las em cada tipo de conta, ficando assim:

//Meu método saque dentro da classe Conta
saque(valor) {
        if (valor < 0 + this.saqueMin) return;
        const comissao = valor * this.taxaSaque;
        const saque = valor - comissao;
    //Ignore que estou roubando dinheiro
    //na linha abaixo kkkkkkk
        this._saldo = Number((this._saldo - saque).toFixed(2));
        return saque;
    }
//Cada tipo de conta tem suas próprias definições dessas
// variáveis no meu codigo
class ContaPoupanca extends Conta {
    constructor(agencia) {
        super(agencia),
            this.depostioMin = 0,
            this.saqueMin = 50,
            this.taxaDeposito = 0.02,
            this.taxaSaque = 0,
            this.juros = 0.015
    }
}

Meu jeito funciona e me parece ser mais fácil de entender. Será que na verdade eu fiz uma aberração ineficiente da programação ou isso é viável no mundo real?

solução!

Fala ai Lúcio, tudo bem? Vamos lá:

Meu jeito funciona e me parece ser mais fácil de entender. Será que na verdade eu fiz uma aberração ineficiente da programação ou isso é viável no mundo real?

Magina, é uma abordagem totalmente válida ao meu ver, acho que vai depender muito do contexto e cenário de cada um, ambos possuem seus prós e contras.

A sua abordagem pode ter simplificado, porém, foi necessário ter vários parâmetros e os parâmetros podem crescer cada vez mais, tudo depende de como será a função sacar.

A abordagem de sobreescrita pode exigir mais código, porém, passa a responsabilidade para cada classe, tornando a classe Conta mais simples e livre de lógicas.

Normalmente eu prefiro a segunda opção, mas, isso não torna a primeira inválida, apenas abordagens diferentes para realizar a mesma coisa.

Espero ter ajudado.

Ajudou bastante, obrigado ^^

Magina Lucio, sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.