โ 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"]