🧩 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.