โ† Kembali ke Konsep OOP
๐Ÿ”—
Relasi

Association (Asosiasi)

Relasi umum di mana satu objek memakai atau berinteraksi dengan objek lain tanpa kepemilikan; keduanya bisa ada secara mandiri.

Masalahnya

Memodelkan interaksi dunia nyata, seperti Guru yang mengajar Murid, membutuhkan cara merepresentasikan relasi antar objek tanpa menyiratkan bahwa satu objek mengendalikan siklus hidup objek lainnya.

Cara Kerja

  • โ€บObjek saling menyimpan referensi, tetapi masing-masing punya siklus hidup sendiri
  • โ€บBisa one-to-one, one-to-many, atau many-to-many
  • โ€บBisa satu arah (hanya satu objek yang mengenal yang lain) atau dua arah
  • โ€บBentuk relasi paling lemah, sekadar "mengenal" atau "memakai"

Kapan Digunakan

โœ“Memodelkan kolaborasi antar entitas yang mandiri (Driver dan Car)
โœ“Saat tidak ada objek yang memiliki atau mengendalikan siklus hidup objek lain
โœ“Merepresentasikan referensi/tautan antar objek domain

Contoh di Dunia Nyata

๐ŸŽ
iOS

Property delegate yang menunjuk ke objek mandiri yang tidak dimiliki

๐Ÿค–
Android

ViewModel yang menyimpan referensi ke Repository yang bukan miliknya

๐ŸŒ
Web

Objek User yang mereferensikan Department lewat ID, keduanya disimpan terpisah

Contoh Kode

Swift
class Student {
    let name: String
    init(name: String) { self.name = name }
}

class Teacher {
    let name: String
    private var students: [Student] = []

    init(name: String) { self.name = name }

    func assign(_ student: Student) {
        students.append(student)
    }

    func roster() -> [String] {
        students.map { $0.name }
    }
}

let teacher = Teacher(name: "Ms. Lee")
teacher.assign(Student(name: "Alice"))
teacher.assign(Student(name: "Bob"))
print(teacher.roster())  // ["Alice", "Bob"]