1
resposta

Interface no desafio final

Eu implementei uma interface (e funcionou), porém gostaria de saber se dessa maneira é "correta" ou não. Vou colocar somente alguns trechos importantes...

interface Transferivel {
    fun transfere(valor: Double, contaDestino: Conta)
}
abstract class Conta(internal val titular: String = "", protected val conta: Int = 0) : Transferivel {
class ContaSalario(
        titular: String,
        conta: Int
) : Conta(
        titular = titular,
        conta = conta
) {
    override fun saca(valor: Double, taxa: Double) {
        //Comentei esse trecho
    }

    override fun transfere(valor: Double, contaDestino: Conta) {
        println("Esse tipo de conta não permite transferência")
    }
}

E da classe ContaCorrente não vou postar pois fiz o tratamento adequado para o usuário realizar uma transferência.. Eu vi como você fez no github mais quis usar uma abordagem usando interface.

1 resposta

Opa, tudo bom Wilber?

É uma solução válida sim! Nesse contexto específico, como você mesmo viu no git do Alex, a solução "ideal" foi utilizar a classe abstrata para que a gente não precisasse implementar duas vezes o mesmo método transfere() nas duas contas. Porém, o uso da interface como você fez também é válido, já que caso apareça alguma outra entidade no nosso negócio e ela precise ser "transferível", podemos simplesmente fazer com ela implemente a interface sem nos preocupar se ela é uma conta ou não.

Analisando de uma maneira mais fria, eu diria que o seu código tem um pró e um contra. O contra seria o uso de mais código repetido, por conta do método tranfere() que eu citei antes. Já o pró seria o desacoplamento provido pela interface.

Valeu por compartilhar o seu código, tenho certeza que isso ajudará outras pessoas que farão o desafio, dando uma outra perspectiva através da interface.

Bons estudos!!