1
resposta

[Sugestão] Refatoração do Código do Instrutor

Fiz apenas uma refatoração no código do instrutor no exercício "Relatório do Produto", porque ele estava infringindo alguns conceitos que aprendi, como o de encapsulamento. Ele estava acessando diretamente os atributos da classe Product, e isso é um erro. O mais sensato a se fazer é criar métodos para isso, como os getters e setters. E, para evitar que qualquer pessoa tenha acesso direto a métodos como setPrice() e setQuantity(), pode-se torná-los private, permitindo que apenas métodos internos os utilizem. Os valores dos produtos podem ser passados diretamente pelo construtor, no momento em que for instanciado um novo objeto Product, como no código abaixo:

Instructor Code:

Class Produto

public class Produto {
    String nome;
    double preco;
    int quantidade;
 
    void exibirInformacoes() {
        System.out.println("Produto: " + nome);
        System.out.printf("Preço: R$ %.2f\n", preco);
        System.out.println("Quantidade em estoque: " + quantidade);
    }
 
    public static void main(String[] args) {
        Produto p = new Produto();
        p.nome = "Mouse Gamer";
        p.preco = 159.9;
        p.quantidade = 25;
 
        p.exibirInformacoes();
    }
}

Meu codigo:

Class Product

package com.github.rickmvi.product;

import lombok.AccessLevel;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

@lombok.AllArgsConstructor(access = lombok.AccessLevel.PUBLIC)
@lombok.Getter(value = lombok.AccessLevel.PUBLIC)
@lombok.Setter(value = AccessLevel.PRIVATE)
@lombok.ToString(of = {"name", "price", "quantity"})
public class Product {

    private String name;
    private double price;
    private int quantity;

    public void displayInformations() {
        DecimalFormat formatter = new DecimalFormat("R$#,##0.00");
        System.out.printf("Name: %s, Price: %s, Quantity: %d%n", name, formatter.format(price), quantity);
    }

    /**
     * Exibe as informações do produto formatando o preço conforme a moeda especificada.
     *
     * @param currency "BRL" para Real ou "USD" para Dólar.
     */
    public void displayInformationsFormatted(String currency) {
        NumberFormat formatter;

        if ("US$".equalsIgnoreCase(currency))
            formatter = NumberFormat.getCurrencyInstance(Locale.US);
        else
            formatter = NumberFormat.getCurrencyInstance(Locale.of("pt", "BR"));

        System.out.printf("Name: %s, Price: %s, Quantity: %d%n", name, formatter.format(price), quantity);
    }
}

Class Main

package com.github.rickmvi;

import com.github.rickmvi.product.Product;

public class Main {
    public static void main(String[] args) {
        Product product = new Product("Mouse Gamer", 159.9, 25);

        product.displayInformations();
    }
}

Output:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

E aí, Rick! Tudo bem?

Parabéns! Mantenha o ritmo nos exercícios e continue compartilhando na nossa comunidade.

Percebi que você praticou o uso de anotações do Lombok, aplicou muito bem o encapsulamento com @Getter e @Setter para proteger os atributos da classe e ainda entendeu a relevância de formatar valores monetários para melhorar a legibilidade das informações exibidas.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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