Voltar para a lista

Exercício 3 — Composição (Java)

🧩 Exercício 3 — Composição

Tema: Sistema de produtos e especificações técnicas

Objetivo: Demonstrar o relacionamento de composição entre objetos.

Enunciado:
Implemente as classes Produto e Especificacao para representar um relacionamento de composição, no qual cada produto é composto por uma especificação técnica. A especificação não pode existir sem o produto. O programa principal, responsável por cadastrar produtos e suas especificações, será fornecido. Sua tarefa é modelar corretamente as classes e métodos necessários.

💻 Código Java

// Main.java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    private static final Scanner sc = new Scanner(System.in);
    private static final List<Produto> produtos = new ArrayList<>();

    public static void main(String[] args) {
        int opcao;
        do {
            menu();
            opcao = lerInt("Escolha uma opção: ");
            switch (opcao) {
                case 1 -> cadastrarProduto();
                case 2 -> listarProdutos();
                case 3 -> removerProduto();
                case 0 -> System.out.println("Encerrando...");
                default -> System.out.println("Opção inválida!");
            }
            System.out.println();
        } while (opcao != 0);
    }

    private static void menu() {
        System.out.println("=== Sistema de Produtos (COMPOSIÇÃO) ===");
        System.out.println("1) Cadastrar produto com especificações");
        System.out.println("2) Listar produtos detalhados");
        System.out.println("3) Remover produto");
        System.out.println("0) Sair");
    }

    private static int lerInt(String msg) {
        while (true) {
            try {
                System.out.print(msg);
                return Integer.parseInt(sc.nextLine().trim());
            } catch (NumberFormatException e) {
                System.out.println("Digite um número válido.");
            }
        }
    }

    private static double lerDouble(String msg) {
        while (true) {
            try {
                System.out.print(msg);
                return Double.parseDouble(sc.nextLine().trim().replace(",", "."));
            } catch (NumberFormatException e) {
                System.out.println("Digite um valor numérico válido.");
            }
        }
    }

    private static String ler(String msg) {
        System.out.print(msg);
        return sc.nextLine().trim();
    }

    private static void cadastrarProduto() {
        System.out.println("--- Cadastrar Produto ---");
        String nome = ler("Nome: ");
        double preco = lerDouble("Preço (R$): ");
        String proc = ler("Processador: ");
        String mem = ler("Memória: ");
        String tela = ler("Tela: ");
        String arm = ler("Armazenamento: ");

        Produto p = new Produto(nome, preco, proc, mem, tela, arm);
        produtos.add(p);
        System.out.println("Produto cadastrado com sucesso!");
    }

    private static void listarProdutos() {
        System.out.println("--- Produtos Detalhados ---");
        if (produtos.isEmpty()) {
            System.out.println("(vazio)");
            return;
        }
        for (Produto p : produtos) {
            System.out.println(p);
        }
    }

    private static void removerProduto() {
        System.out.println("--- Remover Produto ---");
        if (produtos.isEmpty()) {
            System.out.println("Nenhum produto cadastrado.");
            return;
        }
        for (int i = 0; i < produtos.size(); i++) {
            System.out.println(i + " -> " + produtos.get(i).getNome());
        }
        int idx = lerInt("Índice do produto para remover: ");
        if (idx >= 0 && idx < produtos.size()) {
            produtos.remove(idx);
            System.out.println("Produto removido. Suas especificações foram excluídas automaticamente (composição).");
        } else {
            System.out.println("Índice inválido.");
        }
    }
}

🧾 Exemplo de Execução


=== Sistema de Produtos (COMPOSIÇÃO) ===
1) Cadastrar produto com especificações
2) Listar produtos detalhados
3) Remover produto
0) Sair
Escolha uma opção: 1
--- Cadastrar Produto ---
Nome: Notebook Atlas X15
Preço (R$): 5499.00
Processador: Intel Core i7-13700H
Memória: 16 GB
Tela: 15.6" IPS 144 Hz
Armazenamento: 512 GB SSD NVMe
Produto cadastrado com sucesso!

Escolha uma opção: 2
--- Produtos Detalhados ---
Produto{nome='Notebook Atlas X15', preco=R$ 5499.0, especificacao=[Processador: Intel Core i7-13700H, Memória: 16 GB, Tela: 15.6" IPS 144 Hz, Armazenamento: 512 GB SSD NVMe]}

Escolha uma opção: 3
--- Remover Produto ---
0 -> Notebook Atlas X15
Índice do produto para remover: 0
Produto removido. Suas especificações foram excluídas automaticamente (composição).

Escolha uma opção: 0
Encerrando...
    

💡 Observação: Em uma relação de composição, o objeto parte (Especificacao) é criado e destruído junto com o objeto todo (Produto), não podendo existir de forma independente.