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] [Projeto] DESAFIO - Duvida sobre boas praticas

Quando terminei de realizar o desafio, fui ver a correção e percebi alguns pontos diferentes do meu projeto. São pontos que eu devo me atentar para seguir as boas práticas ou é só mais uma maneira de concluir o desafio?
Alias, a classe ContaBancaria e Produto foram criadas com o mesmo proposito das classes CartaoDeCredito e Compra

package desafio.Compras;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class PrincipalCompras {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("Digite um limite para suas Compras: R$");
        double limite =  sc.nextDouble();
        sc.nextLine();          // Limpa o Buffer

        ContaBancaria contaBancaria = new ContaBancaria(limite);

        List<Produto> listaProdutos = new ArrayList<>();

        while (true) {
            System.out.println("-".repeat(30));
            System.out.println("Saldo Disponível: R$"+contaBancaria.getSaldo());
            System.out.print("Digite a descrição do produto: ");
            String nome = sc.nextLine();    // Limpa o Buffer

            System.out.println("Digite o preço do produto: ");
            double preco = Double.parseDouble(sc.nextLine());

            boolean sucessoNaCompra = contaBancaria.comprarProduto(preco);
            if (sucessoNaCompra){
                listaProdutos.add(new Produto(nome,preco));
            }

            System.out.println("Gostaria de continuar? [1]-SIM | [0]-NÃO");


            if (sc.nextInt()==0) break;
            sc.nextLine();  // limpa o buffer
        }

        listaProdutos.sort(Comparator.comparing(Produto::getPreco));

        sc.close();

        contaBancaria.exibirFatura(listaProdutos);
    }
}
package desafio.Compras;

public class Produto {

    private String nome;

    private double preco;

    public Produto(String nome, double preco) {
        this.nome = nome;
        this.preco = preco;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    @Override
    public String toString() {
        return "Produto: "+this.nome+"; Preço: R$"+ this.preco ;
    }
}
package desafio.Compras;

import java.util.List;

public class ContaBancaria {

    private double limite;
    private double saldo;

    public ContaBancaria(double limite) {
        this.limite = limite;
        this.saldo = limite;
    }

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public boolean comprarProduto(double valorGasto){

        if (!(valorGasto>0)){
            System.out.println("Valor Inválido");
            return false;
        }

        if (saldo - valorGasto >=0 ) {
            saldo = saldo - valorGasto;
            return true;
        }
        System.out.println("Saldo Insuficiente");
        return false;
    }

    public void exibirFatura(List<Produto> lista){
        System.out.println("*".repeat(30));
        System.out.println("\tFATURA DO CARTÃO");
        System.out.println();
        lista.forEach(System.out::println);
        System.out.println();
        System.out.println("Saldo Restante R$"+ saldo);
        System.out.println("*".repeat(30));
    }
}
1 resposta

Oi, Dudulocaspi! Como vai?

A forma como você comparou a sua solução com a proposta da atividade. Esse tipo de análise ajuda bastante a desenvolver boas práticas. No seu caso, criar as classes ContaBancaria e Produto com responsabilidades semelhantes a CartaoDeCredito e Compra faz sentido.

Em muitos desafios existem diferentes formas de chegar ao mesmo resultado, e isso faz parte do aprendizado. Vale apenas observar se cada classe possui uma responsabilidade bem definida e se os nomes escolhidos representam corretamente o papel de cada objeto.

Uma dica interessante para o futuro é utilizar o método isEmpty() antes de exibir uma lista, evitando processamentos desnecessários. Veja este exemplo:


if (listaProdutos.isEmpty()) {
    System.out.println("Nenhum produto cadastrado.");
}

Nesse exemplo, o código verifica se a lista está vazia antes de continuar o processamento, tornando a aplicação mais organizada em alguns cenários.

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