#10 RELASI ASOSIASI



A. Relasi Asosiasi

Hubungan antara dua atau lebih kelas yang menggambarkan bahwa objek pada satu kelas memiliki keterkaitan dengan objek pada kelas lain dalam sebuah sistem.

Contoh sederhana:

Siswa — belajar — MataPelajaran

Asosiasi tidak menentukan siapa yang dimiliki siapa, hanya menunjukkan hubungan interaksi.


B. Ciri-Ciri Relasi Asosiasi

No Ciri Relasi Asosiasi
1 Menghubungkan dua atau lebih kelas dalam sistem
2 Tidak ada konsep kepemilikan (berbeda dengan composition/aggregation)
3 Memiliki arah komunikasi (arrow) opsional
4 Bisa memiliki multiplicity / kardinalitas
5 Bersifat fleksibel — dapat berubah selama proses sistem


C. Interaksi Antar Kelas Berdasarkan Multiplicity

a. One to One (1 — 1)

Satu objek dari kelas A hanya berhubungan dengan satu objek kelas B.

Contoh Kasus:

Satu siswa memiliki 1 kartu pelajar.

Diagram (Sederhana):

Siswa (1) ----------- (1) KartuPelajar

Contoh Code:

class KartuPelajar {
    private String nomor;

    public KartuPelajar(String nomor) {
        this.nomor = nomor;
    }

    public String getNomor() {
        return nomor;
    }
}

class Siswa {
    private String nama;
    private KartuPelajar kartu;

    public Siswa(String nama, KartuPelajar kartu) {
        this.nama = nama;
        this.kartu = kartu;
    }

    public void info() {
        System.out.println(nama + " - " + kartu.getNomor());
    }
}

public class Main {
    public static void main(String[] args) {
        KartuPelajar kp = new KartuPelajar("KP001");
        Siswa s = new Siswa("Andi", kp);

        s.info();
    }
}

Penjelasan:

Relasi satu-satu: setiap objek siswa hanya punya satu kartu pelajar.


b. One to Many (1 — * )

Satu objek kelas A berhubungan dengan banyak objek kelas B.

Contoh Kasus:

Satu guru mengajar banyak siswa.

Diagram (Sederhana):

Guru (1) ----------- (*) Siswa

Contoh Code:

import java.util.ArrayList;

class Siswa {
    private String nama;

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

    public String getNama() {
        return nama;
    }
}

class Guru {
    private String nama;
    private ArrayList<Siswa> daftarSiswa = new ArrayList<>();

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

    public void tambahSiswa(Siswa s) {
        daftarSiswa.add(s);
    }

    public void tampilkanSiswa() {
        System.out.println(nama + " mengajar:");
        for (Siswa s : daftarSiswa) {
            System.out.println("- " + s.getNama());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Guru guru = new Guru("Bu Ratna");
        guru.tambahSiswa(new Siswa("Dewi"));
        guru.tambahSiswa(new Siswa("Rizki"));

        guru.tampilkanSiswa();
    }
}

Penjelasan:

Objek guru memiliki list siswa (banyak).


c. Many to One (* —  1)

Banyak objek kelas A berhubungan dengan satu objek kelas B.

Contoh Kasus:

Banyak siswa berada dalam satu kelas.

Diagram:

Siswa (*) ----------- (1) Kelas

Contoh Code:

class Kelas {
    private String nama;

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

    public String getNama() {
        return nama;
    }
}

class Siswa {
    private String nama;
    private Kelas kelas;

    public Siswa(String nama, Kelas kelas) {
        this.nama = nama;
        this.kelas = kelas;
    }

    public void info() {
        System.out.println(nama + " berada di kelas " + kelas.getNama());
    }
}

public class Main {
    public static void main(String[] args) {
        Kelas k = new Kelas("X PPLG 1");

        Siswa s1 = new Siswa("Bima", k);
        Siswa s2 = new Siswa("Salsa", k);

        s1.info();
        s2.info();
    }
}

Penjelasan:

Semua objek siswa menunjuk ke objek kelas yang sama.


d. Many-to-Many ( * — * )

Banyak objek kelas A berhubungan dengan banyak objek kelas B.

Contoh Kasus:

Siswa dapat ikut banyak mata pelajaran, dan mata pelajaran dapat memiliki banyak siswa.

Diagram:

Siswa (*) ----------- (*) MataPelajaran

Contoh Code:

import java.util.ArrayList;

class MataPelajaran {
    private String nama;
    ArrayList<Siswa> siswa = new ArrayList<>();

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

    public void tambahSiswa(Siswa s) {
        siswa.add(s);
    }

    public String getNama() {
        return nama;
    }

    public ArrayList<Siswa> getSiswa() {
        return siswa;
    }
}

class Siswa {
    private String nama;
    ArrayList<MataPelajaran> mapel = new ArrayList<>();

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

    public void ambilMapel(MataPelajaran m) {
        mapel.add(m);
        m.tambahSiswa(this);
    }

    public String getNama() {
        return nama;
    }
}

public class Main {
    public static void main(String[] args) {

        MataPelajaran pbo = new MataPelajaran("PBO");
        MataPelajaran bd = new MataPelajaran("Basis Data");

        Siswa s1 = new Siswa("Aldi");
        Siswa s2 = new Siswa("Winda");

        s1.ambilMapel(pbo);
        s1.ambilMapel(bd);
        s2.ambilMapel(pbo);

        for (MataPelajaran m : new MataPelajaran[]{pbo, bd}) {
            System.out.println("\nMata Pelajaran: " + m.getNama());
            System.out.println("Diikuti oleh:");
            for (Siswa s : m.getSiswa()) {
                System.out.println("- " + s.getNama());
            }
        }
    }
}

Penjelasan:

Relasi dua arah: siswa ↔ mapel.
Keduanya menyimpan daftar objek masing-masing sehingga hubungan bersifat many-to-many.

D. Kesimpulan

Jenis Relasi Contoh Implementasi
One-to-One Siswa ↔ Kartu Pelajar Penggunaan objek tunggal
One-to-Many Guru → Siswa ArrayList di dalam kelas induk
Many-to-One Siswa → Kelas Objek tunggal direferensikan banyak objek
Many-to-Many Siswa ↔ Mata Pelajaran Dua ArrayList saling terhubung

Posting Komentar

Lebih baru Lebih lama

Formulir Kontak