Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Lista de exercícios

Crie uma classe ContaBancaria com métodos para realizar operações bancárias como depositar(), sacar() e consultarSaldo(). Em seguida, crie uma subclasse ContaCorrente que herda da classe ContaBancaria. Adicione um método específico para a subclasse, como cobrarTarifaMensal(), que desconta uma tarifa mensal da conta corrente.

Além disso, no método sacar() da ContaCorrente, cobre uma taxa de saque também. Armazene essa taxa como uma constante da classe.

1 resposta

Boa noite! Espero que esteja bem.

Pensei assim para resolver o problema proposto.

ContaBancaria.php

<?php

class ContaBancaria {

    public function __construct(

        public readonly string $nomeTitular,
        public int $saldo,
        public readonly bool $pessoaComDeficiencia,
    ) {
    }

    function depositar(int $valorASerDepositado): void {
        if ($valorASerDepositado <= 0) {
            echo "Error: Valor inserido inválido!" . PHP_EOL;
            return;
        }
        $this->saldo += $valorASerDepositado;
        echo "Sucess: Valor depositado com sucesso!" . PHP_EOL;
    }

    function sacar(int $valorASerSacado): void {
        if ($valorASerSacado <= 0 || $valorASerSacado > $this->saldo) {
            echo "Error: Valor inserido inválido!" . PHP_EOL;
            return;
        }
        $this->saldo -= $valorASerSacado;
        echo "Sucess: Valor sacado com sucesso!" . PHP_EOL;
    }

    function consultarSaldo(): void {
        echo 'Saldo atual: ' .  $this->saldo . PHP_EOL;
    }
}

ContaCorrente.php

<?php

class ContaCorrente extends ContaBancaria {
    public const VALOR_TARIFA = 5;
    public const VALOR_TARIFA_MENSAL = 20;
    public function __construct(
        string $nomeTitular,
        int $saldo,
        bool $pessoaComDeficiencia,
    ) {

        parent::__construct($nomeTitular, $saldo, $pessoaComDeficiencia);
    }


    public function cobrarTarifaMensal(): int {

        if ($this->pessoaComDeficiencia) {
            return $this->saldo;
        }
        return $this->saldo -= self::VALOR_TARIFA_MENSAL;
    }

    public function sacar(int $valorASerSacado): void {
        $tarifa = 0;
        if (!$this->pessoaComDeficiencia) {
            $tarifa = self::VALOR_TARIFA;
        }
        $valorASerSacado += $tarifa;

        echo 'Valor da tarifa por saque: ' . $tarifa . PHP_EOL;
        parent::sacar($valorASerSacado);
    }
}

index.php

<?php

require_once __DIR__ . "/ContaBancaria.php";
require_once __DIR__ . "/ContaCorrente.php";

$contaCorrenteEliel = new ContaCorrente("Eliel", 0, FALSE);

$contaCorrenteEliel->depositar(1000);
$contaCorrenteEliel->consultarSaldo();

$contaCorrenteEliel->sacar(100);
$contaCorrenteEliel->consultarSaldo();

$contaCorrenteEliel->cobrarTarifaMensal();
$contaCorrenteEliel->consultarSaldo();

$contaCorrenteEliel->sacar(100);
$contaCorrenteEliel->consultarSaldo();

$contaPoupancaEliel = new ContaBancaria("ELIELZIN", 10, FALSE);

$contaPoupancaEliel->depositar(1000);
$contaPoupancaEliel->consultarSaldo();
$contaPoupancaEliel->sacar(100);