import java.util.ArrayList;
import java.util.List;

class ItemPesanan {
    private final String namaBarang;
    private final int jumlah;

    // Constructor tanpa modifier publik: hanya dibuat dari dalam Pesanan.
    ItemPesanan(String namaBarang, int jumlah) {
        this.namaBarang = namaBarang;
        this.jumlah = jumlah;
    }

    public String ringkas() {
        return jumlah + "x " + namaBarang;
    }
}

class Pesanan {
    private final String nomor;
    private final List<ItemPesanan> item; // komposisi: bagian melekat pada utuh

    public Pesanan(String nomor) {
        this.nomor = nomor;
        this.item = new ArrayList<>();
    }

    // Bagian diciptakan DI DALAM utuh; referensinya tidak dibagikan ke luar.
    public void tambahItem(String namaBarang, int jumlah) {
        item.add(new ItemPesanan(namaBarang, jumlah));
    }

    public void cetak() {
        System.out.println("Pesanan " + nomor + ":");
        for (ItemPesanan i : item) {
            System.out.println("  " + i.ringkas());
        }
    }
}

public class KomposisiPesanan {
    public static void main(String[] args) {
        Pesanan pesanan = new Pesanan("PSN-001");
        pesanan.tambahItem("Buku Java Dasar", 2);
        pesanan.tambahItem("Pensil", 5);
        pesanan.cetak();

        // Saat referensi pesanan dihapus, item di dalamnya ikut tak terjangkau.
        pesanan = null;
        System.out.println("Pesanan dihapus; item-nya ikut tidak terjangkau");
    }
}
