1
resposta

[Dúvida] essa foi a minha solução!

minha duvida é se assim o código está ok (boa pratica)?

interface

interface ContasComTransferencia {
    fun transferencia(valor: Double, destino: Conta): Boolean

}

calsse ContaSalario

class ContaSalario(titular: String, numero: Int):Conta(titular,numero){

}

classe conta

open class Conta(var titular: String, val numero: Int) {
   
    var saldo = 0.0
        protected set
    


     open fun deposita(valor: Double) {
        if (valor > 0) {
            this.saldo += valor
        }
    }

      fun saca(valor: Double) {
          if (this.saldo >= valor) {
              this.saldo -= valor
          }
      }

}

classe ContaCorrente

class ContaCorrente(titular: String, numero: Int) :Conta(titular,numero),Restricao{
    override fun transferencia(valor: Double, destino: Conta): Boolean {
            if (this.saldo >= valor) {
                this.saldo -= valor
                destino.deposita(valor)
                return true
            }
            return false
        }


}

classe ContaPoupança

class ContaPoupanca(titular: String, numero: Int) :Conta(titular,numero),Restricao {

    override fun transferencia(valor: Double, destino: Conta): Boolean {
        if (this.saldo >= valor) {
            this.saldo -= valor
            destino.deposita(valor)
            return true
        }
        return false
    }
}

Fun testaContasDiferentes

fun testaContasDiferentes() {
    val contaCorrente = ContaCorrente(titular = "alex", numero = 1000)
    val contaPoupanca = ContaPoupanca(titular = "fran", numero = 1001)
    val contaSalario=ContaSalario("gui",1151)
    contaSalario.deposita(1500.0)
    contaCorrente.deposita(1000.0)
    contaPoupanca.deposita(1000.0)

    println("saldo corrente ${contaCorrente.saldo}")
    println("saldo poupança ${contaPoupanca.saldo}")
    println("saldo Salario ${contaSalario.saldo}")

    contaCorrente.saca(100.0)
    contaPoupanca.saca(100.0)
    contaSalario.saca(500.0)

    println("saldo após o saque ${contaCorrente.saldo}")
    println("saldo após o saque ${contaPoupanca.saldo}")
    println("saldo após o saque ${contaSalario.saldo}")

    contaCorrente.transferencia(valor = 100.0, destino = contaPoupanca)
    println("saldo da conta corrente após fazer uma tranferencia para a poupança ${contaCorrente.saldo}")
    println("saldo da conta pupança após receber a tranferencia  ${contaPoupanca.saldo}")

    contaPoupanca.transferencia(valor = 100.0, destino = contaCorrente)
    println("saldo da conta poupança após fazer uma tranferencia para a corrente ${contaPoupanca.saldo}")
    println("saldo da conta corrente após receber a tranferencia  ${contaCorrente.saldo}")
}

main

fun main() {
testaContasDiferentes()

}
1 resposta

Olá, Antonio! Como vai?

Pelo código que você compartilhou, parece que você está implementando corretamente a interface ContasComTransferencia e as classes ContaSalario, ContaCorrente e ContaPoupanca estão herdando dessa interface.

A classe ContaSalario está herdando da classe Conta e não possui a função transferencia, o que está de acordo com a restrição da conta salário de não permitir transferências.

As classes ContaCorrente e ContaPoupanca estão herdando da classe Conta e implementando a função transferencia da interface ContasComTransferencia. Nelas, você está verificando se o saldo é suficiente para realizar a transferência, descontando o valor transferido do saldo da conta de origem e adicionando o valor transferido ao saldo da conta de destino.

Para testar o código, você pode chamar a função testaContasDiferentes na função main e verificar se a transferência de valores entre as contas está funcionando corretamente.

No entanto, vale ressaltar que, de acordo com o contexto do desafio, a conta salário não deve permitir transferências. Portanto, ao tentar realizar a transferência com a conta salário, você deve receber um erro de compilação.

Espero ter ajudado! Bons estudos!