โ Kembali ke Konsep OOP
๐งฉ
Relasi
Aggregation (Agregasi)
Relasi "has-a" di mana container menyimpan referensi ke objek yang bisa ada tanpa container tersebut; relasi whole-part tanpa kepemilikan.
Masalahnya
Beberapa objek secara logis menjadi bagian dari sebuah grup, tetapi tidak boleh ikut terhapus saat grupnya dihapus. Menghapus Playlist tidak seharusnya menghapus Song di dalamnya.
Cara Kerja
- โบ"Part" bisa ada tanpa "whole" dan bisa dipakai bersama oleh beberapa whole
- โบDirepresentasikan sebagai kumpulan referensi, bukan instance yang dimiliki
- โบMenghapus container tidak ikut menghapus bagian-bagiannya
- โบBentuk kepemilikan yang lebih lemah dibanding composition
Kapan Digunakan
โPlaylist berisi Song yang juga ada di luar playlist
โDepartment berisi Employee yang bisa pindah ke department lain
โTeam yang mereferensikan Player yang tetap ada tanpa team tersebut
Contoh di Dunia Nyata
๐
iOS
Array berisi objek model bersama yang direferensikan oleh beberapa view controller
๐ค
Android
Entitas Playlist yang mereferensikan ID Song yang disimpan di database Room
๐
Web
Keranjang belanja yang menyimpan referensi ke objek Product dari katalog
Contoh Kode
Swift
class Song {
let title: String
init(title: String) { self.title = title }
}
class Playlist {
let name: String
private(set) var songs: [Song] = []
init(name: String) { self.name = name }
func add(_ song: Song) {
songs.append(song)
}
}
let bohemianRhapsody = Song(title: "Bohemian Rhapsody")
let playlist = Playlist(name: "Road Trip")
playlist.add(bohemianRhapsody)
// bohemianRhapsody still exists even if `playlist` is deallocated