Solucionado (ver solução)

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!

Solucionado
(ver solução)
2
respostas

[Projeto] Lista de exercícios

Olá! Boa tarde.

Proposta do exercício:

Praticar é muito importante! Por isso, preparamos um exercício para você colocar em prática o conteúdo abordado nesta aula.
Levando em consideração o código a seguir:

<?php

class Conta
{
    private int $saldoEmCentavos;
    private string $nomeTitular;
    private string $numeroConta;

    public function setSaldoEmCentavos(int $saldoEmCentavos): void
    {
        $this->saldoEmCentavos = $saldoEmCentavos;
    }

    public function getSaldoEmCentavos(): int
    {
        return $this->saldoEmCentavos;
    }

    public function setNomeTitular(string $nomeTitular): void
    {
        $this->nomeTitular = $nomeTitular;
    }

    public function getNomeTitular(): string
    {
        return $this->nomeTitular;
    }

    public function setNumeroConta(int $numeroConta): void
    {
        $this->numeroConta = $numeroConta;
    }

    public function getNumeroConta(): string
    {
        return $this->numeroConta;
    }
}
2 respostas

Boa tarde! Pensei a seguinte solução.

# **RESOLUÇÃO PROPOSTA**# 

**Exercicio01.php**
<?php

/*
Como podemos torná-lo um pouco mais robusto, impedindo que o saldo seja manipulado livremente, por exemplo?
 Altere o código da classe para que o saldo seja alterado somente através das operações de saque e depósito.
*/

class Conta {
    private int $saldoEmCentavos = 0;
    private string $nomeTitular;
    private string $numeroConta;


    public function depositar(int $valorASerDepositado): void {
        $this->saldoEmCentavos += $valorASerDepositado;
    }

    public function getSaldoEmCentavos(): int {
        return $this->saldoEmCentavos;
    }

    public function setNomeTitular(string $nomeTitular): void {
        $this->nomeTitular = $nomeTitular;
    }

    public function getNomeTitular(): string {
        return $this->nomeTitular;
    }

    public function setNumeroConta(int $numeroConta): void {
        $this->numeroConta = $numeroConta;
    }

    public function getNumeroConta(): string {
        return $this->numeroConta;
    }
}

**IndexExercicio01.php**

<?php

include_once(__DIR__ . "/Exercicio01.php");

$contaBancaria = new Conta;

$contaBancaria->depositar(1000);
$contaBancaria->depositar(500);

echo $contaBancaria->getSaldoEmCentavos();
solução!

Oii, Eliel! Tudo bem?

Parabéns pela solução! Você acertou o ponto principal: removeu o setSaldoEmCentavos() e inicializou o saldo com 0. Agora o saldo só muda por operações da própria classe.

Alguns ajustes para completar:

  1. Falta o saque: o enunciado pede saque e depósito. No sacar(), vale impedir que o valor seja maior que o saldo.
  2. Validação: hoje é possível fazer depositar(-1000). Vale aceitar apenas valores positivos.
  3. Número da conta: a propriedade é string, mas o setter recebe int. O ideal é usar string nos dois.

Por exemplo:

public function depositar(int $valorEmCentavos): void
{
    if ($valorEmCentavos <= 0) {
        echo "Valor inválido." . PHP_EOL;
        return;
    }
    $this->saldoEmCentavos += $valorEmCentavos;
}

public function sacar(int $valorEmCentavos): void
{
    if ($valorEmCentavos <= 0 || $valorEmCentavos > $this->saldoEmCentavos) {
        echo "Saque não permitido." . PHP_EOL;
        return;
    }
    $this->saldoEmCentavos -= $valorEmCentavos;
}

Você está no caminho certo. Continue praticando!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!