class Buku {
    private final String judul;

    public Buku(String judul) {
        this.judul = judul;
    }

    public String judul() {
        return judul;
    }
}

class Anggota {
    private final String nama;
    private Buku pinjaman; // asosiasi: relasi sementara, bisa berupa null

    public Anggota(String nama) {
        this.nama = nama;
    }

    public void pinjam(Buku buku) {
        this.pinjaman = buku; // relasi terbentuk saat runtime
        System.out.println(nama + " meminjam \"" + buku.judul() + "\"");
    }

    public void kembalikan() {
        System.out.println(nama + " mengembalikan \"" + pinjaman.judul() + "\"");
        pinjaman = null; // relasi berakhir; kedua objek tetap hidup
    }
}

public class Asosiasi {
    public static void main(String[] args) {
        Buku buku = new Buku("Java Dasar");
        Anggota budi = new Anggota("Budi");

        budi.pinjam(buku);
        budi.kembalikan();
        System.out.println("Buku dan anggota tetap hidup setelah relasi berakhir");
    }
}
